Swift 5.1 新特性:透明类型关键字 some

相信大家都对刚发布的 SwiftUI 印象深刻,在看示例代码的时候发现 View 前面有一个关键字 some。我开始以为是 SwiftUI 自带的属性,后来经网友提示发现是 Swift 5.1 的新特性。
some 的用法就是修饰在一个 protocol 前面,默认场景下 protocol 是没有具体类型信息的,但是用 some 修饰后,编译器会让 protocol 的实例类型对外透明。
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:763164022,不论你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,探讨技术, 大家一起交流学习成长!

举个例子:我们有一个函数想要得到一个可以判等的值:
func makeInt() -> Equatable { return 5}let intA = makeInt()let intB = makeInt()if intA == intB { print("equal")}但是这样写编译器会报错:
Protocol ‘Equatable’ can only be used as a generic constraint because it has Self or associated type requirements
Equatable 的协议中的定义和具体类型有关,上面的例子中编译器不知道 makeInt() 返回的具体类型是哪一个,因而它不能作为一个函数值返回的类型。不能当做一个类型使用,只能用作泛型束缚。
假如在原有体系下就只能这样做:
func makeInt<T: Equatable>() -> T { return 5 as! T}let intA: Int = makeInt()let intB: Int = makeInt()if intA == intB { print("equal")}在使用泛型束缚公告后,在代码调用的时候编译器可以通过类型推断出具体类型是什么,因而就满足了 Equatable 的定义。
但是只能用泛型束缚公告语法上的确很操蛋。在某些场景下,开发者的函数返回类型是确定的,可不可以编译器自己推断出具体类型,这样即可以不用泛型束缚了呢?
想的是真美啊,苹果这就给你实现了:

在协议前面标记上 some 后,返回值的类型对编译器就变成透明的了。在这个值使用的时候编译器可以根据返回值进行类型推断得到具体类型。
那假如我爱的魔力转圈圈,返回值的类型让编译器猜不到呢?

我这样写:

好吧,编译器是个狼人。

What’s new in Swift 5.1
SE 0244:opaque result types
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Swift 5.1 新特性:透明类型关键字 some