【发布时间】:2015-10-12 08:24:24
【问题描述】:
在UIViewController 子类中需要声明一个名为webView 的变量,其类型可以是UIWebView 或WKWebView(取决于iOS 版本)。
有没有比以下选项之一更好的方法(也许使用枚举?):
- 声明
UIView类型的变量,然后每次我需要访问它时有条件地转换为这两种类型 - 不是在公共父类
UIViewController超类中声明变量,而是在两个特定UIViewController子类中两次声明特定类型的变量?感觉它违反了“不要重复自己”/DRY 原则。
【问题讨论】:
-
我目前无法测试,但是
#if os (watchOS) typealias MyWebView = WKWebView #else typealias MyWebView = UIWebView #endif(“构建配置语句”)呢? -
我喜欢这种方法,但不幸的是我需要一个 runtime 解决方案,而
#if`` &typealias` 似乎是编译时功能,因此在运行时不可用。除非我误解了什么? -
是的,这是在编译时评估的。其实我昨天在电话里看到你的问题时误解了这个问题。我以为你想在 iOS 和 watchOS 应用程序之间共享代码,这对我来说很愚蠢。
-
您可以做的是定义一个 protocol 包含您要在视图上调用的所需方法,然后使 UIWebView 和 WKWebView 都符合该协议(通过类别) 并将实例变量声明为
id<MyWebViewProtocol>。 -
@MartinR - 谢谢 - 如果您将此作为答案转发,我会将其标记为已接受。