迅速

2016-08-16 142 views
22

「無法從非公開課繼承」作爲Xcode的8測試版的6我現在得到的編譯錯誤的定義模塊」迅速

I類之外的「不能從非公開課(類)繼承」從被繼承是一個獨立的斯威夫特框架的一部分,但我的項目編制了Xcode的8測試版5.我需要什麼改變讓我的項目重新編譯?

+2

相關:http://stackoverflow.com/questions/38947101/what-is-an-open-var-in-swift –

回答

41

找到自己的答案。

在斯威夫特3您現在可以將類標記爲open而不是public,這允許模塊外部的文件將該類繼承。

只需用open替換模塊類中的public即可。

參考here

+0

有趣。我甚至不知道這件事。 – Alexander

+2

也記錄在Xcode 8 beta 6發行說明中。 –

+0

工作得很好!大! –

16

您繼承的類需要定義爲open而不是public。上的變化更多

的位上下文訪問控制在夫特3:

夫特2只有3個訪問級別:

  • private:實體僅可從源文件中,其中它們是內定義。
  • internal:實體可用於包含該定義的整個模塊。
  • public:實體旨在用作API,並且可以由導入該模塊的任何文件訪問。

夫特3加​​入2個訪問級別(openfileprivate)和改變的private含義:

  • private:僅在當前聲明中符號可見。
  • fileprivate:符號在當前文件中可見。
  • internal:符號在當前模塊中可見。
  • public:符號在當前模塊外部可見。
  • open:用於在當前模塊外部進行子類化或重寫的類或函數。