Swift 4新功能-1

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 关键词的使用.

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容