.dynamicType已弃用.请改用'type(of ...)'

Rod*_*igo 32 xcode swift

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

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

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

dfr*_*fri 34

(下面适用于Swift 3;不是传统的Swift语言版本(2.3),但是它没有回答OP的问题,但对于Swift 3用户来说可能是有价值的,但仍然如此)

如你的问题所述,dynamicType现在(Swift 3)被弃用了type(of:).此外:

  • NSBundle已重命名为Bundle.
  • init(forClass:)的初始化Bundle已重命名为init(for:).

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

class Foo {
    func bar() -> () {
        let bundle = Bundle(for: type(of: self))
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Andrej请参阅[Xcode 8的发行说明](https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Introduction.html):_"`dynamicType`关键字已从Swift.在它的位置添加了一个新的原始函数`type(of:)`.使用`.dynamicType`成员来检索表达式类型的现有代码应该迁移到这个新原语."_.如果你试图在Swift 3/Xcode 8中使用`dynamicType`,你应该得到类似的信息( - >替换为`type(of:)`). (3认同)

Rod*_*igo 3

@dfri 答案非常适合 Swift 3。

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

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

谢谢大家。