在Swift属性中要求协议和类
发布时间:2020-12-14 05:51:08 所属栏目:百科 来源:网络整理
导读:在Objective-C中,您可以要求类和附加协议实现的属性: @property (nonatomic) UIViewControllerUISplitViewDelegate *viewController; 这是否可能在斯威夫特?从文档看,您只需要一个类或一个协议。 在Swift中实际上有两种方法可以实现: 使用空的“幻像”
在Objective-C中,您可以要求类和附加协议实现的属性:
@property (nonatomic) UIViewController<UISplitViewDelegate> *viewController; 这是否可能在斯威夫特?从文档看,您只需要一个类或一个协议。
在Swift中实际上有两种方法可以实现:
>使用空的“幻像”协议。创建一个空协议,使UIViewController符合它。这是最“Swift”的方法,它是安全的,它是动态的(不需要在编译时指定一个类)。 protocol _UIViewControllerType {} extension UIViewController: _UIViewControllerType {} class MyClass { weak var viewController: protocol<UISplitViewControllerDelegate,_UIViewControllerType>? } 您也可以为此类型声明一个typealias(只是为了减少代码乱码)。 class MyClass { typealias ViewControllerType = protocol<UISplitViewControllerDelegate,_UIViewControllerType> weak var viewController: ViewControllerType? } >使用通用约束。如fnc12和Konstantin Koval所述。这是安全的,但不允许您在运行时“切换”视图控制器实例。 class MyClass<T: UIViewController where T: UISplitViewControllerDelegate> { weak var viewController: T? } 我希望下一个Swift版本添加一种方法来指定两个约束,而不使用“幻像协议”… typealias ViewControllerType = UIViewController: UISplitViewControllerDelegate // wish (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |