swift 類和結構體

來源:互聯網
上載者:User

標籤:style   blog   color   使用   strong   io   for   cti   

1:類和結構體定義類和結構體分別通過關鍵字class 和struct定義。swift的編碼風格是類class和結構體struct名字使用大寫字母開頭的匈牙利標記法,相反的。類的方法和屬性則用小寫字母開頭的匈牙利標記法。結構體總是通過被複製而進行代碼傳遞的。
struct SForm{    var iXX:Int = 99    var strHello:String = "dsf"    func testFunc(iXX:Int)->Int{        return iXX+1    }}class CTset{    var iAge:Int = 9    var strName:String = "xx"    func testFunction(iAge:Int)->Int{        return iAge+1    }    func testFunctionName(strName:String)->String{        return "oo"+strName    }}

2:類和結構體執行個體

var structObj = SForm()structObj.iXX = 988let iRes = structObj.testFunc(4)
let clsObj = CTset()clsObj.iAge = 987let iRe:Int = clsObj.testFunction(32)let iStr:String = clsObj.testFunctionName("sdf")

3:結構體初始化

結構體有一個自動產生的初始化器。新執行個體中各個屬性的初始值可以通過屬性的名稱傳遞到成員逐一初始化器之中。

var objFirst = SForm(iXX:983, strHello:"hel")objFirst.iXX = 87
let objSecond = SForm(iXX:94, strHello:"hwxel")
//objSecond.iXX = 876 error

4:結構體是實值型別

var objFirst = SForm(iXX:983, strHello:"hel")var objSecond = objFirstobjSecond.iXX = 5775println("objFirst: \(objFirst.iXX)  objSecond:\(objSecond.iXX)")
輸出:objFirst: 983  objSecond:5775

5:類是參考型別。

let clsObj = CTset()clsObj.iAge = 987var clsObjEx:CTset = clsObjclsObjEx.iAge = 874println("\(clsObj.iAge)  \(clsObjEx.iAge)")
輸出:clsObj: 874 clsObjEx: 874

6:類的等價於運算=== 與不等價於 !== 運算 。表示是否是引用到同一個類對象

let clsObj = CTset()clsObj.iAge = 987var clsObjEx:CTset = clsObjclsObjEx.iAge = 874if clsObj === clsObjEx {    println("obj same")}

7:類和結構體區別。結構體是實值型別,結構體的賦值意味著拷貝行為的發生。而類是參考型別。

8:集合類型的賦值和拷貝行為。

swift的數組和字典都是以實值型別傳遞的。

8.1字典的拷貝。當有字典執行個體的賦值或者是字典做參數的函數調用時候,字典即發生拷貝行為。字典的key和value的拷貝行為是依賴於她自身到底是引用屬性還是實值型別。

var dicFirst:Dictionary = ["key1":"value1", "key2":"value2"]var dicSecond:Dictionary = dicFirstdicSecond["key1"] = "value1Update"
dicSecond的值被更新,而dicFirst的值依然保持不變。dicFirst和dicSecond是兩個獨立的字典。它的key和value在賦值時候發生了拷貝,因為都是String類型。
class CTset{    var iAge:Int = 9    var strName:String = "xx"    func testFunction(iAge:Int)->Int{        return iAge+1    }    func testFunctionName(strName:String)->String{        return "oo"+strName    }}var clsObjFirst = CTset()clsObjFirst.iAge = 443var dicFirst:Dictionary = ["key1":clsObjFirst]var dicSecond:Dictionary = dicFirst兩個字典dicFirst 和 dicSecond分別為不同的字典,但它的值 clsObjFirst的地址卻是同一個。因為它是類類型,是引用傳遞。

 

8.2數組的賦值與拷貝。數組的拷貝行為只有在數組的長度發生變化的時候才會拷貝。當然數組裡面的內容,是要遵循參考型別還是實值型別的。

var arrayFirst = [1, 33]var arraySecond = arrayFirstarraySecond[0] = 89//arrayFirst[0]和arraySecond[0] 都會被修改成 89 因為數組長度沒變化,所以沒發生拷貝
var arrayFirst = [1, 33]var arraySecond = arrayFirstarrayFirst.append(222)//長度變化,arrayFirst拷貝,獨立另外一個數組arrayFirst[0] = 99println("first:\(arrayFirst)\nsecond:\(arraySecond)")輸出:first:[99, 33, 222]second:[1, 33]

 

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.