any - ShenYj/ShenYj.github.io GitHub Wiki

any

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

从资料中看,这个特性影响似乎不小,对今后也会产生影响,有提到编译优化、调度方式

anysome 具有对称性,其中两个关键字都可以应用于协议约束

参考

⚠️ **GitHub.com Fallback** ⚠️