位置:首頁 > 高級語言 > Swift教學 > Swift結構體

Swift結構體

Swift 提供了利用構造作為結構的靈活的構建塊。 通過利用這些結構的一次可以定義構建體的方法和屬性。

這不同於 C 和 Objective C 編程:

  • 結構不用要求實現文件和接口。

  • 結構體使我們能夠創建一個文件並自動擴展其接口到其它塊。

在結構體中的變量值被複製並傳遞在後續的代碼,通過返回的舊值的副本使得這些值不能被改變。

語法

Structures are defined with a 'Struct' Keyword.
struct nameStruct { 
   Definition 1
   Definition 2
    --- 
   Definition N
}

結構體的定義

考慮例如,假設要訪問包含三個科目記錄標記的學生並找出三個科目的總和。在這裡,markStruct用於初始化的結構有三個標記,數據類型為 'Int'。

struct MarkStruct{
   var mark1: Int
   var mark2: Int
   var mark3: Int
}

訪問結構體及屬性

結構的成員是由它的結構名訪問。 結構體的實例中由 'let' 關鍵字進行初始化。

struct studentMarks {
   var mark1 = 100
   var mark2 = 200
   var mark3 = 300
}
let marks = studentMarks()
println("Mark1 is \(marks.mark1)")
println("Mark2 is \(marks.mark2)")
println("Mark3 is \(marks.mark3)")

當我們使用 playground 運行上麵的程序,得到以下結果:

Mark1 is 100
Mark2 is 200
Mark3 is 300

學生成績需要訪問結構名“studentMarks”。結構成員被初始化為 mark1, mark2, mark3 的整數類型值。然後,結構體 studentMarks()傳遞給 'marks' 使用 'let' 關鍵字。 'marks' 將包含結構成員的值。現在通過 '.' 訪問結構的初始名稱的值,並打印它。

struct MarksStruct {
   var mark: Int

   init(mark: Int) {
      self.mark = mark
   }
}
var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct // aStruct and bStruct are two structs with the same value!
bStruct.mark = 97
println(aStruct.mark) // 98
println(bStruct.mark) // 97

當我們使用 playground 運行上麵的程序,得到以下結果:

98
97

結構體最佳使用方式

Swift 語言提供功能來定義的結構體作為自定義數據類型,用於構建功能塊。 結構體的實例的值傳遞給定義塊來進一步的操作。

需要有結構:

  • 封裝簡單的數據值

  • 使用“值”而不是“引用”複製封裝數據到它的相關聯屬性

  • 結構體為 “複製” 和 “引用”

在 swift 中結構體是通過其成員的值,而不是它的引用。

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
   }
}

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

當我們使用 playground 運行上麵的程序,得到以下結果:

98
96
100

另外一個實例

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
   }
}

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

println(fail.mark1)
println(fail.mark2)
println(fail.mark3)

當我們使用 playground 運行上麵的程序,得到以下結果:

34
42
13

結構體 “markStruct” 需要它的成員首先定義:mark1, mark2 和 mark3. 現在,成員類的變量初始化容納整數值。之後結構成員的副本使用 “self” 關鍵字創建。當結構成員的副本創建結構體塊,其參數標記傳遞給 'marks' 變量,它現在將保存學生的分數。那麼標記打印為 98, 96, 100。 下一步對於相同的結構成員的另一個實例命名為 'fail' 用於指向不同的標記相同結構體的成員。那麼標記現在打印為 34, 42, 13. 這清楚地說明了結構會有成員變量的副本,傳入成員到它們即將推出的功能塊。