2016-09-14 157 views
30

我刚刚更新到Xcode 8和iOS 10(使用传统的Swift语言版本)。.dynamicType已弃用。使用'type(of ...)'代替

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

他的建议是使用type(of: self),但也不成功。任何人都知道解决方案谢谢。

+1

'NSBundle(forClass:self.dynamicType)'在Swift 2.3中编译得很好,你确定“Use Legacy Swift Language Version”设置为“Yes”吗?你总是可以尝试清理你的构建文件夹。 – Hamish

+0

是的,它的设置,我可以看到效果,因为语法错误的数量从30减少到1.我认为这个错误是与新的iOS 10 SDK中更新的新UIKit框架有关,这就是为什么当我更新到Xcode 8甚至激活了传统的Swift语法。 – Rodrigo

+0

不要紧,我的最后一个声明,UIKit仍然是相同的 – Rodrigo

回答

1

@dfri答案完全适用于Swift 3.

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

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

谢谢大家。

+0

@sgonzalez他的答案适用于Swift 3.我使用的是传统的Swift(2)。 – Rodrigo

30

(以下适用于斯威夫特3,不遗留斯威夫特语言版本(2.3),然而,它并没有回答任择议定书的问题,但可能是斯威夫特3用户是有价值的,但是)

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

  • NSBundle已更名为Bundle
  • init(forClass:)Bundle的初始值设定项已更名为init(for:)

考虑到这些变化考虑在内,斯威夫特3初始化(或获取与特定类相关联的现有实例)按以下方式你Bundle对象:

class Foo { 
    func bar() ->() { 
     let bundle = Bundle(for: type(of: self)) 
     // ... 
    } 
} 
+1

OP是使用传统的Swift版本,又名Swift 2.3 - 所以AFAIK他当前的代码应该是有效的 – Hamish

+0

@Hamish哦,我刚刚阅读_“Xcode 8和iOS 10” xD谢谢! – dfri

+0

没问题,我乍一看也一样! – Hamish

相关问题