在Swift属性中要求协议和类

在Swift属性中要求协议和类,第1张

概述在Objective-C中,您可以要求类和附加协议实现的属性: @property (nonatomic) UIViewController<UISplitViewDelegate> *viewController; 这是否可能在斯威夫特?从文档看,您只需要一个类或一个协议。 在Swift中实际上有两种方法可以实现: >使用空的“幻像”协议。创建一个空协议,使UIViewController符合它 在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
总结

以上是内存溢出为你收集整理的在Swift属性中要求协议和类全部内容,希望文章能够帮你解决在Swift属性中要求协议和类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1052644.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存