我剛剛更新到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