2016-09-14 90 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

相關問題