簡體   English   中英

在 iOS 和 MacOS 之間共享代碼 - NSTextField 和 UITextField

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM