標籤:not comment init 學習筆記 路徑 執行個體 XA 相同 語句
swift中常用關鍵字
class、deinit、enum、extension、func、import、init、let、protocol、static、struct、subscript、typealias、var
break、case、continue、default、do、else、fallthrough、if、in、for、return、switch、where、while
as、dynamicType、new、is、super、self、Self、Type、__COLUMN__、__FILE__、__FUNCTION__、__LINE__
associativity、didset、get、infix、inout、left、mutating、none、nonmutating、operator、override、postfix、precedence、prefix、rightset、unowned、unowned(sale)、unowned(unsafe)、weak、willset
關鍵字作用 :
class : 用來聲明一個類
enum : 用來聲明一個枚舉
init : 相對於類的釋構方法的修飾。
deinit : 相對於類的釋構方法的修飾。
對於類的構造和釋構在swift 中需要使用關鍵詞來修飾,而很多進階語言並不需要特別的指定,便C++ 只需要類名與建構函式名相同就可以,不需要額外的關鍵詞。
extension : 擴充.類似於OC的categories.
1. Swift 中的可以擴充以下幾個:
2. 添加計算型屬性和計算靜態屬性
3. 定義執行個體方法和類型方法
4. 提供新的構造器
5. 定義下標
6. 定義和使用新的巢狀型別
7. 使一個已有類型符合某個介面
let : 聲明一個常量. 類似於const
protocol : 協議.也可以叫介面.這個往往在很多進階語言中不能多重繼承的情況下使用協議是一個比較好的多態方式。
static : 聲明靜態變數或者函數
struct : 聲明定義一個結構體
subscript : 下標索引修飾.可以讓class、struct、以及enum使用下標訪問內部的值
typealias : 為此型別宣告一個別名.和 typedef類似.
break : 跳出迴圈.一般在控制流程中使用,比如 for . while switch等語句
case : switch的選擇分支.
continue : 跳過本次迴圈,繼續執行後面的迴圈.
in : 範圍或集合操作,多用於遍曆.
fallthrough : swift語言特性switch語句的break可以忽略不寫,滿足條件時直接跳出迴圈.fallthrough的作用就是執行完當前case,繼續執行下面的case.類似於其它語言中省去break裡,會繼續往後一個case跑,直到碰到break或default才完成的效果.
switch integerToDescribe { case 1, 3, 5, 7, 11, 13, 17, 19: description += " a prime number, and also"; fallthrough // 執行到此並不跳出迴圈,而是繼續執行case5case 5: description += " an integer" // 執行到這一步,跳出迴圈default : description += " finished" }
where : 用於條件判斷,和資料庫查詢時的where ‘id > 10‘這樣功能. swift語言的特性.OC中並沒有.
let yetAnotherPoint = (1, -1) switch yetAnotherPoint { case let (x, y) where x == y: println("(\\(x), \\(y)) is on the line x == y") case let (x, y) where x == -y: println("(\\(x), \\(y)) is on the line x == -y") case let (x, y): println("(\\(x), \\(y)) is just some arbitrary point")
當switch的條件滿足where 後面的條件時,才執行語句。
is & as : is一般用於對一些變數的類型做判斷.類似於OC中的isKindClass. as 與強制轉換含義雷同.
is Example:
for view : AnyObject in self.view.subviews { if view is UIButton { let btn = view as UIButton; println(btn) } }
dynamicType : 擷取對象的動態類型,即運行時的實際類型,而非代碼指定或編譯器看到的類型
__COLUMN__: 列號,
** __FILE__**:路徑,
__FUNCTION__: 函數,
__LINE__ : 行號
看列印
associativity: 運算子的結合性
inout : inout作為函式宣告時,引用傳值的關鍵字。但是在調用的時候引用的是地址,所以在引用的時候要加上
&,例如:
func test(inout a :Int , inout b :Int){ // 函數內相關操作 }var num1 = 3var num2 = 10test(&num1,&num2)
willSet 和 didSet: willSet 和 didSet的作用是對賦值過程前後附加額外的操作
可以看做是捕獲狀態然後做操作,在將要賦值的時候和已經賦值的時候做相 關操作
mutating : 作用:寫在func前面,以便於讓func可以修改struct和protocol的extension中的成員的值。 如果func前面不加mutating,struct和protocol的extension中的成員的值便被保護起來,不能修改
class var: 在swift中對於enum和struct來說支援用static關鍵字來標示靜態變數,
但是對於class成員來說,只能以class var的方式返回一個唯讀值。例如:
struct SomeStructure { static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { // return an Int value here }}enum SomeEnumeration { static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { // return an Int value here }}class SomeClass { class var computedTypeProperty: Int { }}
這樣其實很好的區分了struct和class的功能,
不像C# 抓來一個隨便用,但相對於oc來講其實是弱化了界限,
如果你想在class中搞一個非唯讀靜態變數出來,可以和struct進行配合。
convenience : convenience用來進行方便的初始化,就相當於建構函式重載。
對於class來講,預設或指定的初始化方法作為所謂的Designated初始化。
若重載的初始化需要調用Designated初始化則將它作為convenience初始化,在方法前要加上convenience關鍵字。
class Figure{ var name:String! var nikname:String? init(){ name = "John" } convenience init(name:String!,nikname:String!) { self.init() self.name = name self.nikname = nikname } }
precedence : 運算的優先順序,越高的話優先進行計算。swift 中乘法和除法的優先順序是 150 ,加法和減法的優先順序是 140 ,這裡我們定義點積的優先順序為 160 ,就是說應該早於普通的乘除進行運算。
unowned, unowned(safe), unowned(unsafe):無宿主引用。
infix: 表示要定義的是一個中位操作符,即前後都是輸入
defer: 用來包裹一段代碼,這個代碼塊將會在當前範圍結束的時候被調用。這通常被用來對當前的代碼進行一些清理工作,比如關閉開啟的檔案等。
可以在同一個範圍中指定多個 defer
代碼塊,在當前範圍結束時,它們會以相反的順序被調用,即先定義的後執行,後定義的先執行。
guard : 當某些條件不滿足的情況下,跳出範圍.
func testFunc(input:Int) { guard input < 10 else { print("Input must < 10") return } print("Input is \\(input)")} testFunc(1) testFunc(11)
與if用法一樣,但是作用與if相反.相比if來說,guard有一個好處:如果不使用return,break,continue,throw跳出當前範圍,編譯器會報錯.所以,對那些對條件要求十分嚴格的地方,guard是不二之選。guard也可以使用可選綁定(Optional Binding)也就是 guard let 的格式
func testMathFunc(input:Int?){ guard let _ = input else { print("Input cannot be nil") return }} testMathFunc(nil)
PS: set、get 、new、self、super、none、if 、for、return文中沒提到的就不一一介紹了。沒提到的都是最基本的或者我不知道的或者不常用的關鍵字,後面接觸到新的再繼續記錄.
花前月下
連結:https://www.jianshu.com/p/1ae8c364954a
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
swift學習筆記 - swift中常用關鍵字