Swift 5:快速概述

您可能知道,Apple刚刚发布了Swift 5,其中包括数十项更改。 让我们快速浏览一下通过此版本可以更好地开发哪些常规任务。

您将获得以下内容:

1.减小应用程序大小! 🥳

使用Swift 5编写并针对iOS 12.2,watchOS 5.2,tvOS 12.2编译的应用程序将不包含用于Swift标准库和Swift SDK的动态库。 这意味着应用程序大小将略有减小。 根据此推文,空项目的大小从2.4 MB减少到24 KB。

2.改变“ 尝试?

您肯定遇到了一个问题, 使用try调用throwable函数返回Optional的结果 是包装在两个Optional中的一种类型。 这不是很方便,所以在Swift 5中尝试吗? 返回仅包装在一个Optional中的类型。

在以前的版本中,您必须这样写:

 让结果=尝试?  optionalObject?.foo() 
// type(of:result)= SomeType ??

使用Swift 5:

 让结果=尝试?  optionalObject?.foo() 
// type(of:result)= SomeType?

3.原始字符串

现在可以将双引号和反斜杠用作普通字符,而不用作特殊字符。 因此,为此,您应该在行的开头和结尾添加#符号。

例:

  let string1 =#“带单词的字符串放在”括号“”# 
 让string2 =#“带有\反斜杠的字符串”# 

对于正则表达式,此功能非常有用:

  //快速4.2 
  let regex =“ [A-Z0-9a-z ._%+-] + @ [A-Za-z0-9 .-] + \\。[A-Za-z] {2,64}” 
  //迅速5 
  let regex =#“ [A-Z0-9a-z ._%+-] + @ [A-Za-z0-9 .-] + \。[A-Za-z] {2,64}”# 

4. @dynamicCallable

@dynamicCallable属性使您可以像使用简单的语法糖那样调用函数那样来调用命名类型。 它已添加到Swift中,以将互操作性扩展到动态语言,如Python,JavaScript,Perl和Ruby。

例如:

这是一些简单的Python代码:

  // Python 
 狗类: 
  def __init __(自己,名字): 
  self.name =名称 
  self.tricks = []#为每个“狗”创建一个新的空列表 
  def add_trick(自我,把戏): 
  self.tricks.append(技巧) 

在Swift 4.2中,对Dog类的调用如下所示:

  斯威夫特4.2 
  //将DogModule.Dog导入为Dog 
 让Dog = Python.import.call(with:“ DogModule.Dog”) 
  // dog = Dog(“ Brianna”) 
 让dog = Dog.call(带有:“ Brianna”) 
  // dog.add_trick(“ Roll over”) 
  dog.add_trick.call(带有:“滚动”) 

使用Swift 5:

  迅捷5 
  //将DogModule.Dog导入为Dog 
 让Dog = Python.import(“ DogModule.Dog”) 
  // dog = Dog(“ Brianna”) 
 让dog = Dog(“ Brianna”) 
  // dog.add_trick(“ Roll over”) 
  dog.add_trick(“翻滚”) 

5.压缩字典

此方法将Array的compactMap和Dictionary中的mapValues组合在一起。 调用此方法的结果是,创建了一个具有转换值的字典,其中没有等于nil的值。

例:

 让字典= [“ a”:“ 1”,“ b”:“ 2”,“ c”:“数字”] 
让resultDictionary = dictionary.compactMapValues {Int($ 0)}
// resultDictionary = [“ a”:1,“ b”:2]