繁体   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