sas*_*ade 11 uiviewcontroller swift swift-protocols
我想创建一个特定类型的属性,并且符合协议,我会在Objective-C中完成这样的:
@property (nonatomic) UIViewController<CustomProtocol> *controller;
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是指定可以使用类型为UIViewController的对象设置属性,该对象也符合CustomProtocol,以便清楚基类是什么.我知道我可能只是使用一个短类存根来获得相同的结果,即
class CustomViewController : UIViewController, CustomProtocol {}
Run Code Online (Sandbox Code Playgroud)
但这似乎不是最干净的方法.
type→array-type | 字典型| 功能型| type-identifier | 元组类型| 可选类型| 隐式解包 - 可选类型| protocol-composition-type | 元类型型
您正在寻找的是一种协议组合类型,它也接受基类.(协议组合类型是protocol<Proto1, Proto2, Proto3, …>.)但是,目前这不可能.
具有相关类型要求的协议允许具有指定所需基类和所需协议的类型,但这些也需要在编译时知道类型,因此它不太可能是您的可行选项.
如果您真的喜欢它,您可以UIViewController使用您使用的界面部分定义协议,使用扩展来添加一致性,然后使用protocol<UIViewControllerProtocol, CustomProtocol>.
protocol UIViewControllerProtocol {
func isViewLoaded() -> Bool
var title: String? { get set }
// any other interesting property/method
}
extension UIViewController: UIViewControllerProtocol {}
class MyClass {
var controller: protocol<UIViewControllerProtocol, CustomProtocol>
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2071 次 |
| 最近记录: |