溫馨提示×

溫馨提示×

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

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

深入淺析Swift 結構體

發布時間:2020-11-05 15:26:57 來源:億速云 閱讀:168 作者:Leah 欄目:開發技術

深入淺析Swift 結構體?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

Swift 結構體是構建代碼所用的一種通用且靈活的構造體。

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

與 C 和 Objective C 不同的是:

  • 結構體不需要包含實現文件和接口。
  • 結構體允許我們創建一個單一文件,且系統會自動生成面向其它代碼的外部接口。

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

語法

我們通過關鍵字 struct 來定義結構體:

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

實例

我們定義一個名為 MarkStruct 的結構體 ,結構體的屬性為學生三個科目的分數,數據類型為 Int:

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

我們可以通過結構體名來訪問結構體成員。

結構體實例化使用 let 關鍵字:

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)")

以上程序執行輸出結果為:

Mark1 是 100
Mark2 是 78
Mark3 是 98

實例中,我們通過結構體名 'studentMarks' 訪問學生的成績。結構體成員初始化為mark1, mark2, mark3,數據類型為整型。

然后我們通過使用 let 關鍵字將結構體 studentMarks() 實例化并傳遞給 marks。

最后我們就通過 . 號來訪問結構體成員的值。

以下實例化通過結構體實例化時傳值并克隆一個結構體:

import Cocoa

struct MarksStruct {
  var mark: Int

  init(mark: Int) {
   self.mark = mark
  }
}
var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct // aStruct 和 bStruct 是使用相同值的結構體!
bStruct.mark = 97
print(aStruct.mark) // 98
print(bStruct.mark) // 97

以上程序執行輸出結果為:

98
97

結構體應用

在你的代碼中,你可以使用結構體來定義你的自定義數據類型。

結構體實例總是通過值傳遞來定義你的自定義數據類型。

按照通用的準則,當符合一條或多條以下條件時,請考慮構建結構體:

  • 結構體的主要目的是用來封裝少量相關簡單數據值。
  • 有理由預計一個結構體實例在賦值或傳遞時,封裝的數據將會被拷貝而不是被引用。
  • 任何在結構體中儲存的值類型屬性,也將會被拷貝,而不是被引用。
  • 結構體不需要去繼承另一個已存在類型的屬性或者行為。
     

舉例來說,以下情境中適合使用結構體:

  • 幾何形狀的大小,封裝一個width屬性和height屬性,兩者均為Double類型。
  • 一定范圍內的路徑,封裝一個start屬性和length屬性,兩者均為Int類型。
  • 三維坐標系內一點,封裝x,y和z屬性,三者均為Double類型。
     

結構體實例是通過值傳遞而不是通過引用傳遞。

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)

以上程序執行輸出結果為:

優異成績:
98
96
100
糟糕成績:
34
42
13

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女