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回答了这个问题。

Joe Groff关于SE-0110

我认为,尽管此更改可能会导致更好的类型检查器性能,但这将导致语法的可读性下降。