栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

带“ where Self”子句的Swift协议

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

带“ where Self”子句的Swift协议

SE-0156的过早结果就是能够将超类约束放在协议声明上(也就是说,能够定义类的类型

protocol P where Self :C
在哪里
C
),并且该语法在Swift 4.x中应该被拒绝,直到该功能被发布为止。已实施。尝试在Swift
4.x中使用此功能可能会导致错误编译和崩溃,因此在Swift
5之前我将避免使用它。

在Swift 5(Xpre10.2)中,该功能现已实现。从发行说明中:

协议现在可以将其符合类型限制为子类化给定类。支持两种等效形式:

protocol MyView: UIView {  }protocol MyView where Self: UIView {  }

Swift
4.2接受了第二种形式,但尚未完全实现,有时可能在编译时或运行时崩溃。(SR-5581)(38077232)

此语法

MyView
施加了一个超类约束,该约束将符合类型限制为从(或作为)继承的类型
UIView
。此外,的用法在
MyView
语义上等同于类存在类(例如
UIView& MyView
),因为您可以访问该类的成员以及该值的协议要求。

例如,扩展发行说明的示例:

protocol MyView : UIView {  var foo: Int { get }}class C : MyView {} // error: 'P' requires that 'C' inherit from 'UIView'class CustomView : UIView, MyView {  var foo: Int = 0}// ...let myView: MyView = CustomView(frame: .zero)// We can access both `UIView` members on a `MyView` valueprint(myView.backgroundColor as Any)// ... and `MyView` members as usual.print(myView.foo)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369649.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号