一 .swift簡介
Swift是一種新的編程語言,用于編寫 iOS,OS X 和 watchOS應(yīng)用程序。
1. 語法簡潔捆等、快速滞造、安全,符合現(xiàn)代化編程思維
2. 取消的指針和不安全的操作
3. 廢棄了Smalltalk的語法,全部改為點語法
4. 更豐富的自定義支持:泛型、運算符重載
5. 結(jié)合playground,做到真正意義上的所見即所得
6. 可以無縫對接到現(xiàn)有的 Cocoa 框架,并且可以兼容 Objective-C代碼
二. swift發(fā)展歷史
2014-6-3 WWDC 2014:蘋果2014年開發(fā)者大會發(fā)布栋烤。
2014-6-4 《Swift中文版》翻譯組在github上進行協(xié)同翻譯谒养。此項目開始不到一周就獲得了1067個star。該項目的發(fā)起人是北航的大三學(xué)生明郭。
2014-6-12《Swift中文版》第一版發(fā)布买窟。
2015年12月4日,蘋果公司宣布其Swift編程語言現(xiàn)在開放源代碼。長600多頁的TheSwift Programming Language可以在線免費下載薯定。
三. swift開發(fā)環(huán)境
硬件:Mac電腦系統(tǒng):OS X 10.9以上開發(fā)工具:Xcode6以上
四. swift學(xué)習(xí)資料
官網(wǎng) https://swift.org
官方教程:中文版和英文版swift在github的開源地址 https://github.com/apple/swift
五.swift初始化方法
在Objective-C中,init方法是非常不安全的:沒有人能保證init只被調(diào)用一次,也沒有人保證在初始化方法調(diào)用以后,實例的各個變量都完成初始化,甚至如果在初始化里使用屬性進行設(shè)置的話,還可能會造成各種問題始绍。
雖然Apple也明確說明了不應(yīng)該在init中使用屬性來訪問,但這并不是編譯器強制的,因此還是會有很多開發(fā)者犯這樣的錯誤。
所以Swift有了超級嚴格的初始化方法话侄。一方面,Swift強化了designated初始化方法的地位亏推。Swift中不加修飾的init方法都需要在方法中保證所有非Optional的實例變量被賦值初始化,而在子類中也強制 (顯式或隱式地)調(diào)用super版本的designated初始化,所以無論如何走何種路徑,被初始化的對象總是可以完成完整的初始化的。
- 規(guī)則
指定構(gòu)造器必須向上代理到父類的指定構(gòu)造器(如果有父類)便利構(gòu)造器必須橫向代理到自己的其他(便利或指定)構(gòu)造器,最終必須導(dǎo)致調(diào)用到指定構(gòu)造器指定構(gòu)造器必須保證所有的非可選屬性和常量(let)屬性都被賦值沒有convince修飾的都是指定構(gòu)造器KVC的setValuesForKeysWithDictionary方法調(diào)用中需要使用self,所以要保證self已經(jīng)完成全部初始化,實例可用 - 寫法
- 先初始化子類自身的屬性
- 調(diào)用父類的指定構(gòu)造器:super.init()或者super.init(...)
- 對父類的屬性進一步定制
- 如果第3步?jīng)]有,則可以省略第2步的super.init(),因為會自動調(diào)用
- 如果父類的指定構(gòu)造器不只有init(),那么super.init()不會自動調(diào)用(無法確定該用哪個)
- 重寫和繼承規(guī)則
默認不會繼承父類的構(gòu)造器,如果想提供相同的構(gòu)造器,則需要重寫,即使是默認構(gòu)造器init()重寫父類的指定構(gòu)造器必須加override,可作為子類的便利構(gòu)造器重寫父類的便利構(gòu)造器不需要加override(因為子類不可能直接調(diào)用父類的便利構(gòu)造器) - 自動繼承規(guī)則
如果子類中引入的所有新屬性都提供了默認值,且沒有定義任何指定構(gòu)造器,則會繼承父類所有的指定構(gòu)造器如果子類提供了所有父類指定構(gòu)造器實現(xiàn)(繼承來的或者重寫的),則會自動繼承所有父類的便利構(gòu)造器