哈勃!Swift编程语言由于在iOS的编写应用程序中的使用而非常受欢迎,因此该领域的所有人都对它的开发感兴趣。让我们看看Swift 5.3开发人员的新增功能。多个尾随闭合
新版本(SE-0279)提供了用于有限闭包的新语法,该语法允许您以更易读的方式将多个闭包作为函数参数进行调用。这样可以最大程度地减少函数签名中括号的使用。import Foundation
func load(url: String, success: (Data) -> Void, failure: (Error) -> Void) {
}
load(url: "someURL", success: { data in }, failure: { error in })
load(url: "someURL") { (data) in
} failure: { (error) in
}
在2个通话选项的示例中,可以看到,第二个通话选项看起来更好一些。多模式捕获条款
当前,do-catch语句中的每个catch子句只能包含一个模式。要解决此问题,开发人员将使用switch选项的功能在catch语句的主体中包括模式匹配,从而增加嵌套和重复的代码(SE-0276)。捕获项现在允许用户指定逗号分隔的模板列表,并能够将变量绑定到捕获主体,例如在开关中。enum NetworkError: Error {
case failure, timeout
}
func networkCall(){
do{
try someNetworkCall()
} catch NetworkError.timeout{
print("timeout")
} catch NetworkError.failure{
print("failure")
}
}
func networkCall(){
do{
try someNetworkCall()
} catch NetworkError.failure, NetworkError.timeout {
print("handle for both")
}
}
枚举的综合可比一致性
到目前为止,比较枚举的两个元素并不是一件“令人愉快的”事情。必须符合Comparable并编写一个静态函数<,以确定原始值是否小于另一个值。现在,Swift(SE-0266)允许您不要为所有这些事情的实现“烦恼”,并且只要枚举具有相同的类型,就无需显式实现该协议。如果未指定相应的值,将按照声明的语义顺序对列表进行比较。enum Brightness: Comparable {
case low(Int)
case medium
case high
}
([.high, .low(1), .medium, .low(0)] as [Brightness]).sorted()
自我数量可以减少
从现在开始,可以在不再需要自我的那些地方省略自我(SE-0269)。以前,当我们从外部范围捕获值时,必须在闭包中使用self。struct OldView: View {
var body: some View {
Button(action: {
self.sayHello()
}) {
Text("Press")
}
}
func sayHello() {}
}
struct NewView: View {
var body: some View {
Button {
sayHello()
} label: {
Text("Press")
}
}
func sayHello(){}
}
一般情况下
该语言的新版本(SE-0267)引入了将位置附加到泛型类型和扩展内部的功能。struct Stack<Element> {
private var array = [Element]()
mutating func push(_ obj: Element) {
array.append(obj)
}
mutating func pop(_ obj: Element) -> Element? {
array.popLast()
}
}
extension Stack {
func sorted() -> [Element] where Element: Comparable {
array.sorted()
}
}
您可以向堆栈中添加新的sorted()方法,但仅在堆栈中的元素符合Comparable的情况下才可以。新型浮法16
引入了Float16半精度浮点(SE-0277)。近年来,随着移动设备上机器学习的出现,这仅表明Apple推广该主题的雄心。Float 16通常在移动GPU上用于计算,并在ML应用中用作缩放比例的压缩格式。let f16: Float16 = 7.29
Swift 5.3对Swift Package Manager(SPM)进行了许多增强。考虑他们。- SE-0271(软件包管理器资源)允许SPM包含图像,音频,JSON等资源。
- SE-0272(软件包管理器二进制依赖性)允许SPM使用二进制软件包以及现有的源软件包支持。这意味着现在可以使用SPM集成共享的封闭源SDK(例如Firebase)。
- SE-0273(Package Manager条件目标依赖项)允许您配置目标,以便它们仅具有特定平台和配置的依赖项。例如,您可以在为Linux编译时指定特殊的其他框架。
- SE-0278允许您添加本地化的资源。
因此,可以说5.3版引入了一些优秀的创新,开发人员将随着时间的推移而逐渐采用。