我有一個Swift庫,它嚴重依賴obj.valueForKey()
從NSObject
。Swift 4「此課程不符合關鍵值編碼」
遷移到Swift 4後,我發現這些調用總是崩潰,出現錯誤「這個類不是關鍵值編碼兼容的關鍵...」,除非我要查找的屬性是用@objc
。
現在是否必須聲明與@objc
屬性爲他們找到與此方法?有其他選擇嗎?
我有一個Swift庫,它嚴重依賴obj.valueForKey()
從NSObject
。Swift 4「此課程不符合關鍵值編碼」
遷移到Swift 4後,我發現這些調用總是崩潰,出現錯誤「這個類不是關鍵值編碼兼容的關鍵...」,除非我要查找的屬性是用@objc
。
現在是否必須聲明與@objc
屬性爲他們找到與此方法?有其他選擇嗎?
當您執行遷移時,Xcode詢問了有關@objc
的推理,並且您可能選擇了新類型而不是Swift3。
可能的解決方案:
@objc
使用每一種方法@objc
,根據需要而不是整個類。
@objcMembers
你可以只在類使用@objcMembers
。
將@objcMembers屬性應用於類將@objc屬性隱式添加到它的所有Objective-C兼容成員。
Writing Swift Classes and Protocols with Objective-C Behavior
請記住:因爲應用該@objc屬性可以提高應用程序的編譯大小和不利影響性能,僅適用@objcMembers上聲明屬性時,每個成員都需要有@objc屬性應用。
你也可以改變下的項目的行爲: Build Settings
>Swift 3 @objc Inference
>On
/Off
相關問題:
最好的答案永遠。 我在對象上調用.value(forKey :)時遇到了同樣的問題,雖然它應該是NSCoding key compliant 謝謝! – Mallox
謝謝,謝謝,謝謝。 @objcMembers適合我。 –
比較[我該如何處理與#selector()在斯威夫特4 @objc推理棄用?](https://stackoverflow.com/q/44390378/2976878) – Hamish