Swift 4中的重大更改
在这个博客中,我想深入了解Swift 4中将引入的代码破坏更改的数量。此外,我还将演示如何在当前的 Xcode 8.3.2中使用Swift 4。
重大变化
如果我们总结所有已实施的Swift 4提案,我们(截至31–5–17)将列出以下清单。
用粗体突出显示的建议是在Swift 4中引入源代码更改的建议。让我们更深入地研究每个建议。
区分单元组和多参数函数类型-( SE-0110)
有了这个建议,您现在必须从现在的单个参数手动扩展元组。 让我们用一个例子来解释。
typealias名称=(名字:字符串,姓:字符串)
让名字:[名称] = [(“ Bart”,“ den Hollander”)]
我已经在数组中声明了一个元组。 现在,我想遍历数组中的每个元组并打印姓氏。 让我们在Swift 3中执行此操作。
// Swift 3
names.forEach({首先,最后一个
print(last) //“ den Hollander”
})
Swift 3编译器从元组扩展了“ first”和“ last”变量。 这是非常有用和可读的。
现在让我们在Swift 4中做同样的事情。
// Swift 4
names.forEach({首先,最后一个
打印(最后)
})
//错误:闭包元组参数'(firstName:String,lastName:String)'不支持解构
这不再起作用的原因是,在Swift 4中,您必须从单个参数手动扩展元组。 您可以执行以下操作来解决此问题。
// Swift 4
A:通过提供元组键进行扩展
names.forEach({
print(name.lastName) //“ den Hollander”
})
B:通过在变量中提供元组元素的数量来扩展
names.forEach({
let(first,last)=名称
print(last) //“ den Hollander”
})
C:更改为for循环
的名称(第一个,最后一个){
print(last) //“ den Hollander”
}
关于为什么要引入此更改的问题仍然存在。 Apple的Swift编译器工程师Joe Groff回答了这个问题。
我认为,尽管此更改可能会导致更好的类型检查器性能,但这将导致语法的可读性下降。