.dynamicType已弃用。使用'type(of ...)'代替

时间:2016-09-14 16:04:14

标签: swift xcode

我刚刚更新到Xcode 8和iOS 10(使用传统的Swift语言版本)。

尝试再次编译我的项目一直是一个痛苦,甚至仍然使用旧的Swift语法。这次我的一个函数使用NSBundle(forClass: self.dynamicType),但现在看来.dynamicType已被弃用,Xcode甚至不想编译它。

他的建议是使用type(of: self),但也失败了。谁知道解决方案?感谢。

2 个答案:

答案 0 :(得分:34)

(以下内容适用于Swift 3;不适用于旧版Swift语言版本(2.3),因此它不能回答OP的问题,但对Swift 3用户来说可能很有价值,尽管如此)

正如您的问题中所述,dynamicType现在(Swift 3)已被弃用,而不是type(of:)。另外:

  • NSBundle已重命名为Bundle
  • init(forClass:)的{​​{1}}初始值设定项已重命名为Bundle

考虑到这些变化,对于Swift 3,您可以通过以下方式初始化(​​或获取与特定类关联的现有实例)init(for:)对象:

Bundle

答案 1 :(得分:1)

@dfri回答非常适合Swift 3。

关于Swift 2.3,我的解决方案是清理Xcode(Command + Option + Shift + K)并删除~/Library/Developer/Xcode/DerivedData中的所有内容。问题不会立即消失,但一段时间后它将停止发出错误。

也许这是一个错误,毕竟我们在8.0。我希望它能在下一版本中修复。

谢谢大家。