在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?
}

>使用通用约束。如fnc12Konstantin Koval所述。这是安全的,但不允许您在运行时“切换”视图控制器实例。

class MyClass<T: UIViewController where T: UISplitViewControllerDelegate> {
    weak var viewController: T?
}

我希望下一个Swift版本添加一种方法来指定两个约束,而不使用“幻像协议”…

typealias ViewControllerType = UIViewController: UISplitViewControllerDelegate // wish

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...