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

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

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

與 C 和 Objective C 不同的是:

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

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

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

語法

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

struct nameStruct { 
   Definition 1
   Definition 2
   ……
   Definition N
}

在線示例

我們定義一個名為 MarkStruct 的結(jié)構(gòu)體 ,結(jié)構(gòu)體的屬性為學生三個科目的分數(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' 訪問學生的成績。結(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

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

98
97

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

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

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

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

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

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

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

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

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

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

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

  • 三維坐標系內(nèi)一點,封裝xyz屬性,三者均為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("獲得高分:")
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é)果為:

獲得高分:
98
96
100
獲得低分:
34
42
13

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

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

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清