Swift 3奇怪的崩溃(类型推断)

时间:2016-10-03 08:06:53

标签: ios swift swift3

我无法为此找到更合适的标题。这是场景:

[String: UITableView?]

编辑:如果您没有放置显式类型注释,编译器会在此特定情况下推断views

现在,如果我没有明确让编译器知道[String: Any]属于-[_SwiftValue nsli_superitem]: unrecognized selector sent to instance 0x60000044a560 类型(就像注释掉的东西一样),这段代码会崩溃,我会得到一个整齐的小崩溃给我一个中指以及此消息:

        int _rawTemp = 0x7fd10;
        int _digT1 = 0x196e;
        int _digT2 = 0x7e66;
        int _digT3 = 0x3200;

        int var1 = (((_rawTemp >> 3 - _digT1 << 1)) * _digT2) >> 11;
        int var2 = (((((_rawTemp >> 4) - (_digT1)) * ((_rawTemp >> 4) - (_digT1))) >> 12) * (_digT3)) >> 14;
        int t_fine = var1 + var2;
        int temperature = ((t_fine) * 5 + 128) >> 8;

从Swift 2.x迁移后,这样的事情发生在各地。有人可以就这个问题说清楚吗?为什么会这样?怎么避免这样的事情?如何发现此类崩溃的起源(有些很难追查)?

1 个答案:

答案 0 :(得分:1)

这是Swift 3的一个问题。

明确声明字典:

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

如果您以这种方式创建let views = ["table": self.tableView],则会收到[String:UIView?]类型,并且可选值是主要问题。

AnyAnyObject的<{Usage

  

Swift提供了两种特殊类型来处理非特定类型:

     

任何可以表示任何类型的实例,包括函数   类型。

     

AnyObject可以表示任何类类型的实例。