##好記性不如爛筆頭html
學習swift 原英文版本ios
學習swift 翻譯中文版git
swift數據類型與oc比較swift
###進入 退出swift網絡
goswift > swift //退出 goswift > ctr+z
###第一個關鍵字guard閉包
就是守護。guard語句判斷其後的表達式布爾值爲false時,纔會執行以後代碼塊裏的代碼,若是爲true,則跳過整個guard語句 guard後面必須跟else語句
###inoutapp
在參數前面用inout修飾,在函數內部實現改變外部參數 //調用的時候 swapTwoInts(&one, two: &two) 定義的時候 func swapTwoInts(inout one:Int , inout two:Int) { let temp = one one = two two = temp }
###unowned函數
避免循環引用,使用unowned修飾( let unowned) weak僅能修飾變量,不能修飾常量( var weak)
###lazy學習
懶加載,修飾閉包 OC的lazy加載是重寫屬性的get方法 swift的lazy是隻執行一次
###willSet didSet get setui
willSet 添加觀察屬性變化 相似kvo裏面的addObserver didSet 檢查屬性已經變化
###mutating
用在struct和enum中的函數前面,做用是能夠修改struct,enum和protocal中的屬性值 struct SRectangle { var width = 200 } extention SRectangle { mutating func varifyWidth(num:Int) {} }
###Subscripts Closures
下標的關鍵詞 subscript 閉包的關鍵詞 in swift中全部閉包默認@noescape, 延遲操做,網絡延遲須要@escape. @autoclosure能夠將一句話封裝成閉包
###typealias
別名 typealias unitype = Int 常見應用 typealias bigProtocal = protocal<BigProtocal, CigProtocal>
###defer
1.延緩執行 2.多個defer的狀況,像棧同樣,後進先出,從下往上執行
###throws throw
throws 來聲明異常,throw 來拋出異常
###do-catch
異常處理,注意不是try catch! func functionWillThrowError() throws { //實現 } do { throw functionWillThrowError() }catch MyError.NotExist{ }catch MyError. OutOfRange{ }
###repeat
repeat是循環重複,是do-while的替身 repeat { }while <#條件#>
###func 參數_
請注意定義方法有什麼不一樣 var a=3,b=6 func swapValue(inout a:Int, inout b:Int){} 方法調用 swapValue(&a,b:&b) func swapValue(inout a:Int, inout _ b:Int){} 方法調用 swapValue(&a,&b) 注意參數添加_ 有必定的不一樣 函數還能夠做爲一種類型 var mathFunc :(inout Int,inout Int)->() = swapValue
###extention
extension Int { subscript(digitIndex: Int) -> Int { var decimalBase = 1 for _ in 0..<digitIndex { decimalBase *= 10 } return (self / decimalBase) % 10 } } 746381295[0]//5
###value && reference type
值類型 和 引用類型 值類型(Value Types):每一個實例都保留了一分獨有的數據拷貝。如結構體 (struct)、枚舉(enum) 和元組(tuple) 引用類型(Reference Type):每一個實例共享同一份數據來源,如類(class) // 下面是一個值類型的例子 struct MyStruct { var data = -1 } var s1 = MyStruct() var s2 = s1 // s2是s1的拷貝 s1.data = 42 // 值類型,改變s1的值,s2不受影響 println("\(s1.data), \(s2.data)") // 輸出結果 "42, -1" //值類型: 複製的時候,至關於創造了一個徹底獨立的實例,這個實例保有屬於本身的獨有數據, 數據不會受到其餘實例的數據變化影響 // 下面是一個引用類型的例子 class MyClass { var data: Int = -1 } var x = MyClass() var y = x // y是x的拷貝 x.data = 42 // 引用類型,更改x的值,等於同時修改了y println("\(x.data), \(y.data)") // 輸出結果 "42, 42" //引用類型: 複製的時候,其實是創造了一個共享的實例分身,二者是共用一套數據(數據存儲的地址指向同一塊內存)。 所以修改其中任何一個實例的數據,也會影響到另一個
###is as
is 是類型檢查 var movieCount = 0 var songCount = 0 for item in library { if item is Movie { movieCount += 1 } else if item is Song { songCount += 1 } } as 是類型轉化 as!,as? for item in library { if let movie = item as? Movie { print("Movie: \(movie.name), dir. \(movie.director)") } else if let song = item as? Song { print("Song: \(song.name), by \(song.artist)") } }
###map flatMap filter reduce
Swift提供了map、filter、reduce這三個高階函數做爲對容器的支持
###struct 和 class 區別
###IBDesignable 和 IBInspectable
在Swift裏,@IBDesignable關鍵字寫在class前便可。 在OC裏,是IB_DESIGNABLE這個關鍵字,寫在@implementation前便可 IBInspectable 在swift裏,@IBInspectable關鍵字寫在須要顯示的變量前便可 在OC裏,是IBInspectable這個關鍵字,寫在須要顯示的變量前便可