Swift 4的新功能

Swift 4稳定版本即将发布,可从https://swift.org/download/#snapshots下载swift-4.0-branch。 在本文中,我将带您了解Swift 4中新增的一些功能。

安装 swift-4.0 快照工具链

  1. 请转到https://swift.org/download/#snapshots并从下载部分获取Xcode。

2.安装工具链后,导航至Xcode-> Toolchain,然后选择Swift 4.0 Snapshot。 我建议选择工具链后重新启动xcode。

多行字符串文字-SE-0168

使用\ n添加新行并在字符串中转义双引号并不总是一件容易的事。

Swift 4通过提供对多行字符串文字的支持解决了这个问题。要开始字符串文字,请添加三个双引号(“”“)并按回车键,按回车键后,开始使用任何变量,换行符和双引号编写字符串就像您在记事本或任何文本编辑器中编写的一样。 要结束多行字符串文字,请在新行中再次写入(“”“)。

 让multiLineStringLiteral =“”“ 
这是Swift 4中最好的功能之一
它使您无需任何转义就可以写“双引号”
和不需要“ \ n”的新行
“”
打印(multiLineStringLiteral)

产生以下输出。

  “这是Swift 4中最好的功能之一,\ n您可以编写“双引号”而无需转义\ n,而无需“ \ n”就可以换行 

String will be treated as collection — SE-0163

就像在Swift 1.x版本中一样,可以将字符串视为集合。 您不再需要编写string.characters.xxx即可执行字符串操作。

  let message =“消息!” 
message.count //不需要message.characters.count
 用于消息中的字符{//不需要message.characters 
打印(字符)
}

这将产生以下输出。

  8 
中号
Ë
s
s
一种
G
Ë

MutableCollection.swapAt — SE-0173

尽管这是很小的变化,但必须符合排他性法则的部分引入。

现在,新的交换功能获取要交换元素的索引。

 变量名称= [“ Vipul”,“ Vinay”,“ Vishal”,“ Akshay”] 
names.swapAt(2,3)

这将产生以下输出。

  [“ Vipul”,“ Vinay”,“ Akshay”,“ Vishal”] 

单面范围— SE-0172

似乎Swift受到了Python的启发而引入了这个很棒的功能。 现在,我们可以使用一侧范围,其中缺失的一侧将被自动视为序列的开始或结束。

 让名字= [“ Vipul”,“ Vishal”,“ Vinay”,“ Vikas”,“ Vineet”] 
 让firstTwoString = names [.. <2] 
 让lastThreeString =名称[2…] 
 打印(firstTwoString) 
打印(lastThreeString)

将产生以下输出。

  [“ Vipul”,“ Vishal”] // [..  [0,1] 
[“ Vinay”,“ Vikas”,“ Vineet”] //名称[2…] => [2,3,4]

字典和集的增强功能— SE-0165

  1. 现在,您可以使用数组元素创建字典。
 让朋友= [“ Vipul”,“ Vinay”,“ Vishal”] 
  let friendsDictionary =字典(uniqueKeysWithValues:zip(1…,朋友)) 
 打印(朋友词典) 

这将产生以下输出。

  [2:“ Vinay”,3:“ Vishal”,1:“ Vipul”] 

2. 如果键的值不存在,请提供默认值。 在下面的声明中。 在以下语句中,如果找不到密钥10的值,则它将打印默认值。

 打印(friendsDictionary [10,默认值:“还没有朋友!”]) 

这将产生以下输出。

 还没有朋友! 

3. 不同存储桶中的分区阵列

 让伙伴= [“ Akshay”,“ Anil”,“ Vishal”,“ Vinay”,“ Ankit”] 
  let buckets = Dictionary(分组:伙伴,作者:{$ 0.first!}) 

如果您仔细阅读了以上语法,那么我在这里尝试做的是尝试形成不同的存储桶,其中每个存储桶将包含名称中具有相同第一个字符的队友。 输出如下。

  [“ A”:[“ Akshay”,“ Anil”,“ Ankit”],“ V”:[“ Vishal”,“ Vinay”]] 

快速存档和序列化— SE-0166

好消息! Swift 4带有内置的JSON编码器和解码器。 内置了JSON 模型转换(尽管您可以根据需要自定义该行为)。

定义模型

  struct地址:Codable { 
var street:String
var zip:String
var city:String
var state:String
}
  struct Person:可编码{ 
变量名称:字符串
var地址:地址
}

让我们填写一些细节

  let address =地址(街道:“ Apple Bay Street”,邮政编码:“ 94608”,城市:“ Emeryville”,州:“ California”) 
  let person = Person(姓名:“史蒂夫·乔布斯”,地址:地址) 

编码(模型-> JSON)

  letcoder = JSONEncoder()//定义JSONEncoder 
 如果让编码=尝试?  encoder.encode(person){ 
如果让json = String(数据:已编码,编码:.utf8){
打印(json)
}
}

它将打印以下输出。 (不再需要第三方库将模型转换为JSON🙂)

  {“名称”:“史蒂夫·乔布斯”,“地址”:{“州”:“加利福尼亚”,“街道”:“苹果湾街”,“邮编”:“ 94608”,“城市”:“埃默里维尔”}} 

解码(JSON-> Model)

 让解码器= JSONDecoder() 
如果让解码=尝试? coder.decode(Person.self,来自:编码){
打印(已解码名称)
打印(解码地址)
}

它将打印以下输出。

 史蒂夫·乔布斯 
地址(街道:“苹果湾街”,邮政编码:“ 94608”,城市:“ Emeryville”,州:“ California”)

Smart KeyPaths:键值编码— SE-0161

这是我在Swift 4中最喜欢的功能之一。您可以获取根对象名称并向下钻取至任何属性名称以获取其值。 密钥路径以\运算符开头。 让我们来看看它的作用。

定义模型

 结构地址{ 
var street:String
var zip:String
var city:String
var state:String
}
 朋友struct { 
变量名称:字符串
var地址:[地址]

var primaryAddress:地址{
返回地址。
}
}

让我们填写一些细节

  let address1 =地址(街道:“ Apple Bay Street”,邮政编码:“ 94608”,城市:“ Emeryville”,州:“ California”) 
  let address2 =地址(街道:“ 27th Way”,邮政编码:“ 85042”,城市:“ Phoenix”,州:“ Arizona”) 
 让朋友=朋友(名称:“史蒂夫·乔布斯”,地址:[地址1,地址2]) 

现在,如果我们有朋友对象并想要获取加利福尼亚值,则应使用以下关键路径语法。

 打印(friend [keyPath:\ Friend.primaryAddress.state]) 

它将打印以下输出。

 加利福尼亚州 

还有更多……

Swift 4的第一个稳定版本预计将于6月开始推出,因此我们可能会看到更多建议在Swift 4中使用。

快乐编码🙂

blog.mindorks.com上 查看所有热门文章