我刚刚更新到Xcode 8和iOS 10(使用传统的Swift语言版本)。.dynamicType已弃用。使用'type(of ...)'代替
试图再次编译我的项目一直是一种痛苦,甚至仍然使用旧的Swift语法。这次我的一个功能使用NSBundle(forClass: self.dynamicType)
,但现在看起来.dynamicType
已被弃用,Xcode甚至不想编译它。
他的建议是使用type(of: self)
,但也不成功。任何人都知道解决方案谢谢。
我刚刚更新到Xcode 8和iOS 10(使用传统的Swift语言版本)。.dynamicType已弃用。使用'type(of ...)'代替
试图再次编译我的项目一直是一种痛苦,甚至仍然使用旧的Swift语法。这次我的一个功能使用NSBundle(forClass: self.dynamicType)
,但现在看起来.dynamicType
已被弃用,Xcode甚至不想编译它。
他的建议是使用type(of: self)
,但也不成功。任何人都知道解决方案谢谢。
@dfri答案完全适用于Swift 3.
关于Swift 2.3,我的解决方案是清理Xcode(Command + Option + Shift + K)并删除~/Library/Developer/Xcode/DerivedData
中的所有内容。问题并不会立即消失,但经过一段时间后,它将不再发生该错误。
也许这是一个错误,毕竟我们在8.0。我希望它在下一个版本中得到解决。
谢谢大家。
@sgonzalez他的答案适用于Swift 3.我使用的是传统的Swift(2)。 – Rodrigo
(以下适用于斯威夫特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))
// ...
}
}
'NSBundle(forClass:self.dynamicType)'在Swift 2.3中编译得很好,你确定“Use Legacy Swift Language Version”设置为“Yes”吗?你总是可以尝试清理你的构建文件夹。 – Hamish
是的,它的设置,我可以看到效果,因为语法错误的数量从30减少到1.我认为这个错误是与新的iOS 10 SDK中更新的新UIKit框架有关,这就是为什么当我更新到Xcode 8甚至激活了传统的Swift语法。 – Rodrigo
不要紧,我的最后一个声明,UIKit仍然是相同的 – Rodrigo