WWDC之Intermediate to Swift

前言

Session进一步讲解了关于Swift语言中的语法特性和设计特点,主要内容涉及:

  • Optional可选类型
  • 内存管理
  • 初始化构造
  • Closures闭包
  • 模式匹配

内容

Optionals

Optional总览
  • 针对其值不确定是否存在的变量Optional类型来声明;声明后存在两种状态,一种为有值状态,另一种为nil状态即无值状态(直接声明为可选类型未设初始值时默认值为nil,其处于第二种状态)

  • 只有可选类型变量才能赋值为nil,对于非可选类型(平常的String,Int, Array,类等)设为nil会出现编译错误.
    让某一类型变量成为可选类型,在其平常的类型后加?Int?, String?, UIVew?,想要直接获取其可选类型变量内部的值,在其变量名后加!(强制解包符号),若在其为nil的情况下进行强制解包会造成运行时错误,使用前提必须保证在不为nil情况下进行取值操作,因此官方不推荐使用!强制解包符号进行对可选类型变量的取值.代替的方案为使用if-let句式进行可选绑定操作,利用临时变量来存可选变量真正的值,形式如下:

if let value = OptionalValue {
    print("the real value is \(value)")
} else {
    print(it's nil);
}
  • 可选链,针对在多个可选变量层级获取情况下所应对的快速简便语法,形成链式语式,其中有一个可选变量为nil则无需再向下访问直接返回nil,即使最终全程可选类型访问有效且有值,使用时仍要进行解包操作,其原来返回也是可选类型的变量.
let value = optionalValueA?.optionalValueB?.optionalValueC?.optionalValueD? // still Optional Value`
  • 可选类型内部结构为一个泛型的枚举,两个分支,默认为None分支即变量被设为nil,也可以显示设置为nil;另一个则为接受任何类型的变量为关联值的Some分支,使得可选类型变量可以在有值的情况通过解包获取所存在的值.
enum Optional<T> {
    case None
    case Some(T)
}
演讲者对`Optional`变量的形象比喻

Swift的内存管理

内存管理总览
  • 继续沿用Objective-C自动引用计数机制进行内存管理,绝多数情况下Swift替开发者进行内存管理;

  • 存在强引用的对象的内存不会被系统回收,直至该对象上无强引用;

  • 应对对象间循环引用的情况,Swift提供两种解决方法

    对应循环引用-

    • 使用weak关键字,使用弱引用指向对象,类似Objective-Cweak属性,在弱引用指向的对象释放后其原变量会被设为nil(也说明weak声明的变量必须为可选类型且用var声明,在赋值、调用方法时需要解包操作)
    • 使用unowned关键字,表示不会对引用计数进行+1的引用,所引用的对象释放后也不会被设置为nil,允许用let声明的非可选类型变量,类似于Objective-Cunsafe_unretain属性

初始化构造

初始化总览
  • 根本原则: 所有值在对象实例使用前必须都已被初始化(包括设为nil).

  • 构造方法init(..){...} 内部不允许在所有属性未初始化前调用方法(内部的方法调用实则隐式的self实例调用,违背构造根本原则)

  • 结构体:
    能自动生成构造方法;
    若存在没有初始化或无默认值的属性,会生成相应的构造方法设置其属性的初始值;

  • 类:
    由于继承的特性,构造方法被继承时,需要使用super调用,注意调用时机,在所有本类属性初始化后才能进行父类初始化方法调用.
    允许在调用父类初始化方法后,进行对继承的属性进行再一次修改和操作.
    类的初始化方法分为DesignatedConvenience两种,若存在父类,Designated构造方法都要调用其父类的Designated构造方法,而Convenience构造方法还是依靠Designated构造方法进行实例初始化;
    有继承的类在所有属性都已有初始值的情况下,允许不实现自己的构造方法,自动继承父类的所有DesignatedConvenience构造方法,若自己定义了构造方法,则不会继承父类的构造方法;

  • 属性的懒加载: 想让编译器知道该属性只有到需要访问时才会初始化使用@lazy关键字,并赋值为初始化完整的实例@lazy var manager = Manager()

  • 析构方法:一般移除KOV或者通知的观察者,关闭文件,释放资源时才会用到.

闭包

一般写法

let closure = { (a, b) -> Bool in
    return true
}

标准库闭包

  • sort 排序闭包
  • filter 过滤闭包
  • map 映射闭包
  • reduce 折合闭包

值捕获:
能自动获取上下文变量,进行访问和设置.
闭包和函数都是一种ARC对象,内部能引用和持有其他ARC对象,支持ARC内存管理机制
在值捕获过程中产生的循环引用,应对方法使用unowned关键字

应对循环应用二

模式匹配

模式匹配总览
  • Switch支持类实例对象,数据范围的匹配
  • 枚举允许设置关联值,结合Switch,访问关联值
  • 提供元组匹配,在switch中使用元组作为分支,并且支持where的额外条件匹配

结尾

整体看下来,体会到了Swfit语言对安全性和便利性的不断追求,不论从使用可选类型,遵循构造方法原则都体现着Swift安全这一特性,目的就是为了让开发者能更加安全,有效地编码.

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

推荐阅读更多精彩内容