Swift 5 新增特性

群组
Flutter,iOS,Android,Python等,闲聊工作&技术&问题;
个人主页:https://waitwalker.cn
telegram群链接:https://t.me/joinchat/Ej0o0A1ntlq5ZFIMzzO5Pw

ABI稳定

Swift 社区最近最重大的新闻应该就是 ABI 稳定了.ABI稳定就是binary接口稳定,也就是运行的时候只要是Swift5或者以上的编译器编译出来的binary,就可以跑在任意的Swift 5或以上的runtime上.这样我们就不需要像以往那样在app里面放一个Swift runtime了,Apple会把它集成到iOS和macOS系统里面,这就可以缩减你app的体积,使得你的app在运行时不需要加载自己Swift runtime了,使用系统同一个Swift,所以运行原则上更快,更省运行内存.

@dynamicCallable

@dynamicCallable属性允许你调用命名的类型,使你调用函数更加简单.
如果需要新增@dynamicCallable属性,必须实现以下两个方法中的一个或者两个:

@dynamicCallable struct Person {
    func dynamicallyCall(withArguments args:[Int]) -> [Int]{
        return args.map{$0 * 2}
    }

    func dynamicallyCall(withKeywordArguments args: KeyValuePairs<String,String>) -> [Int] {
        return [1,2,3]
    }

}

let person = Person()
let new = person(1,2,3)
print(new)

Swift标准库

DictionaryLiteral类型在系统库中被命名为KeyValuePairs
Sequence 协议不再具有 SubSequence 关联类型.之前返回 SubSequence 的 Sequence 方法现在返回的是具体的类型.例如,suffix(_:) 现在返回 Array.

String

String之前需要转义\和”等,现在可以通过##,把你要写的字符串全部放这里就可以了,如果某个字符串需要转义通过”#()”操作.

let str = #" "zhang" san "#
print(str)

let newStr = #" \#(str) 是谁 \ "#
print(newStr)

log:
 "zhang" san
  "zhang" san  是谁 \

多行字符:

let multiLineStr = #"""
                            今天
                            明天
                            昨天 \#(newStr)
                            """#

        print(multiLineStr)

isMultiple

检查一个整数是否是另一个整数的倍数

let originalNum = 18

        if originalNum.isMultiple(of: 2) {
            print(#"\#(originalNum)是2的倍数"#)
        }

Swift 包管理器

现在,在使用 Swift 5 Package.swift 工具版本时,可以声明一些常用的特定于目标的构建设置.新的设置也可以基于平台和构建配置进行条件化。构建设置支持 Swift 和 C 语言定义、C 语言头文件搜索路径、链接库和链接框架.

现在,在使用 Swift 5 Package.swift 工具版本时,可以为 Apple 平台自定义最低部署目标.如果程序包的任何依赖项指定的最小部署目标大于程序包自身的最低部署目标,就会抛出错误.
新的依赖项镜像功能允许顶层包覆盖依赖项 URL.


  转载请注明: waitwalker Swift 5 新增特性

  目录