美文网首页
Swift 4新功能-1

Swift 4新功能-1

作者: 桂宁813 | 来源:发表于2017-09-05 15:16 被阅读22次

Swift4中更新的大致内容如下:
1.开区间
2.字符串
3.同文件内的扩展, 私有声明可见
4.智能Key path
5.编码和解码
6.协议相关类型的约束
7.字典(Dictionary)和集合(Set)的增强
8.MutableCollection.swapAt 方法
9.reduce 和 inout
10.泛型下标
11.NSNumber 桥接
12.类和协议的组合

以下是具体的介绍:
一、开区间

带来一种新的 RangeExpression 协议和一组前缀/后缀操作符给开区间. 比如现在区间无论是上界还是下界都可以不指定.

1.无限序列
你可以用开区间来造一个无限序列, 对长期使用 enumerated() 方法的同学来说,这是一个福音,尤其是当你不想序号从0开始的时候:

let array1 = ["a","b","c","d"]
let array2 = zip(1..., array1)
Array(array2)
print(Array(array2))

2.集合的下标
在集合的下标中用开区间的话, 集合的 startIndex or endIndex 会“智能填充” 缺失的那一边.

let numbers = [1,2,3,4,5,6,7,8,9,10]
numbers[5...] // 取代 numbers[5..<numbers.endIndex]

3.方式匹配
开区间可用于方式匹配, 比如一个 switch 语句中case 表达式 . 不过, 编译器好像还不能(暂时?) 判定switch 已被穷尽.

let value = 5
switch value {
case 1...:
    print("大于0")
case 0:
    print("0")
case ..<0:
    print("小于0")
default:
    fatalError("不可到达")
}

二、字符串

1.多行字符串字面量
带来一种简洁定义多行字符串的语法,使用 ("""). 在一个多行字符串里并不需要写转义字符, 也就是说大多数文本格式 (如JSON 或 HTML) 就可以直接粘贴而无须任何转义. 结尾三引号的缩进,决定了每一行头部被裁剪的空格多少. Python:致敬我吗😁 Kotlin:我也早有这功能了😓

let str = """
这是一个多行字符串.
不需要在这里转义 "引号".
结尾三引号的位置,
控制空格的裁剪数.
"""
print(str)

2.字符串"又双"变回一个 Collection了, 没错, 天地暂停,时光倒流😂
最大变化 String 再度是一个 Collection (因为在Swift 1.x中是这样的), 比如 String.CharacterView 已经被并入其父类型中. (其他view, UnicodeScalarView, UTF8View, 和 UTF16View, 依旧存在.)

let str2 = "侬好Bobo, 😜!"
// 不需要再钻到 .characters 属性里面去了
str2.count
for tmp in str2 {
    print(tmp)
}

3.Substring 是字符串切片后的新类型
字符串切片现在是 Substring类型的实例. String 和 Substring 两者都遵从 StringProtocol. 几乎所有字符串API都在 StringProtocol 所以 String 和 Substring 行为很大程度是一样的.

let index1 = str2.index(of: ",")!
let substring = str2[..<index1]
type(of: substring)
// Substring 可以调用 String 的 API
print(substring.uppercased())

4.Unicode 9
Swift 4 即将支持 Unicode 9, 当前正在修正 一些时髦emoji适当的语义问题. 下面的所有字符计数是 1, 和实际的对比:

"👧🏽".count // 人 + 肤色
"👨‍👩‍👧‍👦".count // 有4个成员的家庭
"👱🏾\u{200D}👩🏽\u{200D}👧🏿\u{200D}👦🏻".count // 家庭 + 肤色
"👩🏻‍🚒".count // 人 + 肤色 + 职业

5.Character.unicodeScalars 属性
现在可以直接访问一个 Character 的unicode编码值,而不用先转成String:

let c: Character = "🇪🇺"
Array(c.unicodeScalars)

三、同文件内的扩展, 私有声明可见

更改了访问控制规则,比如在同文件内的扩展中,原类型的private声明也是可见的. 这种改进可让同文件内保持使用private分割类型定义成为可能 , 减少不受欢迎的 fileprivate 关键词的使用.

内容比较多,请看下一篇文章。(^ _ ^)

相关文章

网友评论

      本文标题:Swift 4新功能-1

      本文链接:https://www.haomeiwen.com/subject/mqwujxtx.html