![](/img/trans.png)
[英]iCloud Core Data sharing between iOS and macOS apps not working
[英]Sharing code between iOS and MacOS - NSTextField and UITextField
我有一個應用程序,它在兩個平台之間基本相同,共享邏輯和對象名稱。 但是代碼是完全不同的,我想把它放在一起。
我試圖盡可能地整合邏輯以使維護更容易。 但是在 iOS 上我使用
result.text = valueString
在 MacOS 中它是
result.stringValue = valueString
有什么方法可以做我想做的事:共享代碼中除用戶界面定義之外的所有內容? 我看過變色龍,但它似乎沒有延伸到這么遠。
我將創建一個兩個類都符合的協議,用作文本訪問器:
protocol TextAccess {
func getText() -> String?
}
extension UITextView: TextAccess {
func getText() -> String? {
return text
}
}
extension NSTextField: TextAccess {
func getText() -> String? {
return stringValue
}
}
這樣,您只需在任何類型上調用.getText()
即可調用它們的特定訪問器。 您可能需要將上面的代碼包裝在#if
塊中,但這只是解決此問題的一種方法的粗略示例。
另一種方法是創建別名:
#if os(iOS)
typealias TextField = UITextField
#endif
#if os(macOS)
typealias TextField = NSTextField
#endif
無論您在TextField
訪問TextField
,您都將訪問特定於平台的類。
我找到了。 真的很明顯,如果你知道具體的語法是什么......
#if os(iOS)
result.text = valueString
#else
result.stringValue = valueString
#endif
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.