【swift 關鍵詞】讓咱們牢記swift中的一些關鍵字用途

##好記性不如爛筆頭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 區別

  • struct是value type, class 是reference type. struct 直接跟變量賦值,class不能
  • struct賦值給另一個struct,值不變,可是class要變
  • struct賦值給let,則裏面不屬性不能修改,class則能夠修改屬性值
  • extention struct 添加新funcs時須要添加mutating修飾,class不用添加修飾
  • struct 沒有繼承,class有繼承

###IBDesignable 和 IBInspectable

在Swift裏,@IBDesignable關鍵字寫在class前便可。 
在OC裏,是IB_DESIGNABLE這個關鍵字,寫在@implementation前便可 
IBInspectable 

在swift裏,@IBInspectable關鍵字寫在須要顯示的變量前便可 
在OC裏,是IBInspectable這個關鍵字,寫在須要顯示的變量前便可

更多信息,點擊> https://my.oschina.net/kshopping/blog/917185

相關文章
相關標籤/搜索