美文网首页
Swift5.2 新特性

Swift5.2 新特性

作者: HarveyCC | 来源:发表于2019-04-09 11:09 被阅读0次
    • Print 函数传参新格式
    let param = "参数"
    print(#"这是一个\#(param) xxxxx"#)
    
    • 允许在模块中定义和标准库中名称一样的类型
      比如在MyModule模块中定义Result
    public enum Result<T> {
        case value(T)
        case error(Error)
    }
    

    如果你在任何代码中引入了 MyModule,比如

    import MyModule
    func doSomething() -> Result<Int> {  }
    

    这时如果你需要引用标准库中的Result类型,你需要这样做,否则Result将解析到MyModule中的Result

    func useStandardLibraryResult() -> Swift.Result<Int, Error> {  /* */  }
    
    • @dynamiccalable属性
      使用@dynamiccalable属性后,调用函数就像使用简单语句一样。
    @dynamicCallable struct ToyCallable {
        func dynamicallyCall(withArguments: [Int]) {}
        func dynamicallyCall(withKeywordArguments: KeyValuePairs<String, Int>) {  }
    }
    
    var x = ToyCallable()
    x(1, 2, 3)
     // Desugars to `x.dynamicallyCall(withArguments: [1, 2, 3])`
            
    x(label: 1, 2)
    // Desugars to `x.dynamicallyCall(withKeywordArguments: ["label": 1, "": 2])`
    
    • 在枚举中不支持可变参数
      例如:
    enum X {
        case foo(bar: Int...) 
    }
    func baz() -> X {
        return .foo(bar: 0, 1, 2, 3) 
    } 
    

    在Swift5.2 中可变参数应该使用数组来代替

    enum X {
        case foo(bar: [Int]) 
    } 
    func baz() -> X {
        return .foo(bar: [0, 1, 2, 3]) 
    } 
    
    • Key paths支持ID密钥路径(\.self),一个可写入的密钥路径,可以引用其整个输入值
    let id = \Int.self
    var x = 2
    print(x[keyPath: id]) // Prints "2"
    x[keyPath: id] = 3
    print(x[keyPath: id]) // Prints "3"
    
    • 条件编译,兼容Swift 5之前的代码
    #if compiler(<5)
    extension MyType: _ExpressibleByStringInterpolation { /*...*/ }
    #else
    extension MyType: ExpressibleByStringInterpolation { /*...*/ }
    #endif 
    
    未完待续

    相关文章

      网友评论

          本文标题:Swift5.2 新特性

          本文链接:https://www.haomeiwen.com/subject/qcaviqtx.html