swift 4 新变化 -- What's New in Swift4

  • 原文地址
  • 本文为翻译文
(在这里仅整理Xcode 9 Beta1中已确定的内容,正式版本发布可能会有所变更)

JSON Encoder and Decoder

Swift中使用JSON时,主要在 SwiftyJSON或 JSONSerialization中使用,Swift 4中引入并可以使用 JSONEncoder及 JSONDecoder。

struct RequestData: Codable {
    let data: String
}

let data = RequestData(data: "Lorem Ipsum")

do {
    let encoded = try JSONEncoder().encode(data)
    let decoded = try JSONDecoder().decode(RequestData.self, from: encoded)
    decoded.data
}

Type Safe Key path Literals

key path 此前主要是通过字符串或 #keypath来表示。Swift 4中为路径key path 添加了新语法。路径的新语法是已" \ "开始,接下来不空格直接写属性名称。

1| \Type.property

比如设置UILable的背景色,若使用key path 可以写成如下形式。

let keypath = \UILabel.backgroundColor

Source Compatibility Modes

Xcode 9 对代码的兼容性比较好,通过设置,可同时支持 Swift 3.2 及4.0 。 可以在Targets中可以针对不同版本的swift进行设置,可以在保存3.2的基础上,只在必要的部分使用4.0,避免了在代码迁移过程中因为不兼容遇到的各种坑。

swift 4 新变化 -- What's New in Swift4_第1张图片
swift版本设置.png

Multi-line String literals

通过 '' '' '' 与'' '' '' 可以将多行的字符串用一行表示。
字符串的返回值一定要在 '' '' '' 的下一行开始,在 '' '' '' 的前一行结束,例如:

let str = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
"""

One-Sided Ranges

表示区间和范围的 lower bound 与 upper bound 中只能规定一中

1 |  7...

如上代码中,只规定lower bound ,代表从7开始到无限。 虽然很方便但要注意避免无限循环。

One-Sided Ranges 可以在下标中使用。 省略的 bound可以根据位置的不同,自动用作startIndex或 endIndex。

1 | let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2 | print(numbers[...5])
3 | // equals numbers.startIndex...5

Subscript with default value

在读取字典的值时,添加了语法,当该key没有对应的值时,可赋予基本值。


var vegetableCounts = ["spinach": 7]

for veg in ["tomato", "cauliflower"] {
    vegetableCounts[veg, default: 0] += 1
}
未完待续··· 

你可能感兴趣的:(swift 4 新变化 -- What's New in Swift4)