Swift 3 accidents étranges (inférence de type)

Je n'ai pas trouvé de titre plus approprié pour ça. C'est le scénario:

final class Something : UIViewController { fileprivate var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() self.tableView = UITableView(frame: CGRect.zero, style: .plain) self.tableView.translatesAutoresizingMaskIntoConstraints = false //Delegate, register cell, ... self.view.addSubview(self.tableView) let views/*: [Ssortingng: Any]*/ = ["table": self.tableView] //THIS LINE NOW WILL CRASH self.view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|-0-[table]-0-|", options: [], mesortingcs: nil, views: views)) self.view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[table]-0-|", options: [], mesortingcs: nil, views: views)) } } 

EDIT : Si vous ne mettez pas d'annotation de type explicite, le compilateur [Ssortingng: UITableView?] Dans ce cas particulier.

Maintenant, si je ne dis pas explicitement au compilateur que les views sont de type [Ssortingng: Any] (comme le thingie commenté), ce code se bloque et je reçois un petit plantage qui me donne un majeur avec ce message:

 -[_SwiftValue nsli_superitem]: unrecognized selector sent to instance 0x60000044a560 

Des choses comme ça se produisent partout après la migration de Swift 2.x. Quelqu'un peut-il faire la lumière sur le sujet? Pourquoi cela arrive-t-il? Comment éviter les choses comme ça? Comment découvrir les origines de tels accidents (certains sont très difficiles à localiser)?

C'est un problème avec Swift 3.

Déclarez le dictionary explicitement:

 let views: [Ssortingng:UIView] = ["table":self.tableView] 

Dans le cas où vous créez de cette manière, let views = ["table": self.tableView] vous recevez le type [Ssortingng:UIView?] Et la valeur facultative est le problème principal.

Utilisation de Any et AnyObject

Swift fournit deux types spéciaux pour travailler avec des types non spécifiques:

Tout peut représenter une instance de n'importe quel type, y compris les types de fonctions.

AnyObject peut représenter une instance de n'importe quel type de class.