溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Swift 的 結(jié)構(gòu)體

發(fā)布時間:2020-07-14 04:57:19 來源:網(wǎng)絡(luò) 閱讀:1250 作者:調(diào)皮妹子呀 欄目:移動開發(fā)

Swift 結(jié)構(gòu)體是構(gòu)建代碼所用的一種通用且靈活的構(gòu)造體。

我們可以為結(jié)構(gòu)體定義屬性(常量、變量)和添加方法,從而擴(kuò)展結(jié)構(gòu)體的功能。

 C 和 Objective C 不同的是:

結(jié)構(gòu)體不需要包含實現(xiàn)文件和接口。

結(jié)構(gòu)體允許我們創(chuàng)建一個單一文件,且系統(tǒng)會自動生成面向其它代碼的外部接口。

結(jié)構(gòu)體總是通過被復(fù)制的方式在代碼中傳遞,因此它的值是不可修改的。


語法

我們通過關(guān)鍵字 struct 來定義結(jié)構(gòu)體:

struct nameStruct {

   Definition 1

   Definition 2

   ……

   Definition N}


實例

我們定義一個名為 MarkStruct 的結(jié)構(gòu)體 ,結(jié)構(gòu)體的屬性為學(xué)生三個科目的分?jǐn)?shù),數(shù)據(jù)類型為 Int:


struct MarkStruct{

   var mark1: Int

   var mark2: Int

   var mark3: Int

}


我們可以通過結(jié)構(gòu)體名來訪問結(jié)構(gòu)體成員。

結(jié)構(gòu)體實例化使用 let 關(guān)鍵字:


import Cocoa


struct studentMarks {

   var mark1 = 100

   var mark2 = 78

   var mark3 = 98

}

let marks = studentMarks()

print("Mark1 是 \(marks.mark1)")

print("Mark2 是 \(marks.mark2)")

print("Mark3 是 \(marks.mark3)")


以上程序執(zhí)行輸出結(jié)果為:


Mark1 是 100

Mark2 是 78

Mark3 是 98


實例中,我們通過結(jié)構(gòu)體名 'studentMarks' 訪問學(xué)生的成績。結(jié)構(gòu)體成員初始化為mark1, mark2, mark3,數(shù)據(jù)類型為整型。

然后我們通過使用 let 關(guān)鍵字將結(jié)構(gòu)體 studentMarks() 實例化并傳遞給 marks。

最后我們就通過 . 號來訪問結(jié)構(gòu)體成員的值。

以下實例化通過結(jié)構(gòu)體實例化時傳值并克隆一個結(jié)構(gòu)體:


import Cocoa


struct MarksStruct {


   var mark: Int

 

   init(mark: Int) {


                    self.mark = mark

      }

}

var aStruct = MarksStruct(mark: 98)

var bStruct = aStruct // aStruct 和 bStruct 是使用相同值的結(jié)構(gòu)體!

bStruct.mark = 97

print(aStruct.mark) // 98

print(bStruct.mark) // 97

www.fzmajiang.com

以上程序執(zhí)行輸出結(jié)果為:


98

97


結(jié)構(gòu)體應(yīng)用

在你的代碼中,你可以使用結(jié)構(gòu)體來定義你的自定義數(shù)據(jù)類型。

結(jié)構(gòu)體實例總是通過值傳遞來定義你的自定義數(shù)據(jù)類型。

按照通用的準(zhǔn)則,當(dāng)符合一條或多條以下條件時,請考慮構(gòu)建結(jié)構(gòu)體:

結(jié)構(gòu)體的主要目的是用來封裝少量相關(guān)簡單數(shù)據(jù)值。

有理由預(yù)計一個結(jié)構(gòu)體實例在賦值或傳遞時,封裝的數(shù)據(jù)將會被拷貝而不是被引用。

任何在結(jié)構(gòu)體中儲存的值類型屬性,也將會被拷貝,而不是被引用。

結(jié)構(gòu)體不需要去繼承另一個已存在類型的屬性或者行為。


舉例來說,以下情境中適合使用結(jié)構(gòu)體:

幾何形狀的大小,封裝一個width屬性和height屬性,兩者均為Double類型。

一定范圍內(nèi)的路徑,封裝一個start屬性和length屬性,兩者均為Int類型。

三維坐標(biāo)系內(nèi)一點,封裝x,y和z屬性,三者均為Double類型。

結(jié)構(gòu)體實例是通過值傳遞而不是通過引用傳遞。


import Cocoa

struct markStruct{

    var mark1: Int

    var mark2: Int

    var mark3: Int

    

    init(mark1: Int, mark2: Int, mark3: Int){

        self.mark1 = mark1

        self.mark2 = mark2

        self.mark3 = mark3

      }

}

print("優(yōu)異成績:")

var marks = markStruct(mark1: 98, mark2: 96, mark3:100)

print(marks.mark1)

print(marks.mark2)

print(marks.mark3)


print("糟糕成績:")

var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)

print(fail.mark1)

print(fail.mark2)

print(fail.mark3)


以上程序執(zhí)行輸出結(jié)果為:

優(yōu)異成績:

98

96

100


糟糕成績:

34

42

13

www.tiqianzd.com

以上實例中我們定義了結(jié)構(gòu)體 markStruct,三個成員屬性:mark1, mark2 和 mark3。結(jié)構(gòu)體內(nèi)使用成員屬性使用 self 關(guān)鍵字。

從實例中我們可以很好的理解到結(jié)構(gòu)體實例是通過值傳遞的.

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI