any - ShenYj/ShenYj.github.io GitHub Wiki
Swift 5.6 新特性
第一次看这个新特性的时候没理解其真实意图,其实现在看(第二次)也没能完全理解真实目的,目前我能接收到的讯息是
-
写法上有改动
-
比如在定义一个函数时,使用了泛型限定,那么写法上有变化了
-
以前
func test<T>(_ value: T)
-
现在
func test(_ value: any Sayable)
-
-
-
结合之前的 笔记: 元类型、AnyClass、Self,又发现一处改善
-
在函数中,有协议&泛型的参与, 默认情况下
type(of:)
无法拿到真实类型,通过type(of: value as Any)
处理后, 即可获取到真实类型,但我发现用新关键字any
来处理就不会存在这种情况了-
之前
protocol Sayable: AnyObject { } class Person: Sayable { var age: Int = 1 } func test<T>(_ value: T) { let valueType = type(of: value) print(valueType) } let p1 = Person() let p2: Sayable = Person() test(p1) // Person test(p2) // Sayable
-
现在
protocol Sayable: AnyObject { } class Person: Sayable { var age: Int = 1 } func test(_ value: any Sayable) { let valueType = type(of: value) print(valueType) } let p1 = Person() let p2: any Sayable = Person() test(p1) // Person test(p2) // Person
-
-
从资料中看,这个特性影响似乎不小,对今后也会产生影响,有提到编译优化、调度方式
any
与 some
具有对称性,其中两个关键字都可以应用于协议约束
参考