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 Cocoastruct 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 是 100Mark2 是 78Mark3 是 98
實例中,我們通過結構體名 "studentMarks" 訪問學生的成績。結構體成員初始化為mark1, mark2, mark3,數據類型為整型。
然後我們通過使用 let 關鍵字將結構體 studentMarks() 實例化並傳遞給 marks。
最後我們就通過 . 號來訪問結構體成員的值。
以下實例化通過結構體實例化時傳值並克隆一個結構體:
import Cocoastruct MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark }}var aStruct = MarksStruct(mark: 98)var bStruct = aStruct // aStruct 和 bStruct 是使用相同值的結構體!bStruct.mark = 97print(aStruct.mark) // 98print(bStruct.mark) // 97
以上程序執行輸出結果為:
9897
結構體應用
在你的代碼中,你可以使用結構體來定義你的自定義數據類型。
結構體實例總是通過值傳遞來定義你的自定義數據類型。
按照通用的準則,當符合一條或多條以下條件時,請考慮構建結構體:
結構體的主要目的是用來封裝少量相關簡單數據值。
有理由預計一個結構體實例在賦值或傳遞時,封裝的數據將會被拷貝而不是被引用。
任何在結構體中儲存的值類型屬性,也將會被拷貝,而不是被引用。
結構體不需要去繼承另一個已存在類型的屬性或者行為。
舉例來說,以下情境中適合使用結構體:
幾何形狀的大小,封裝一個
width
屬性和height
屬性,兩者均為Double
類型。一定範圍內的路徑,封裝一個
start
屬性和length
屬性,兩者均為Int
類型。三維坐標系內一點,封裝
x
,y
和z
屬性,三者均為Double
類型。
結構體實例是通過值傳遞而不是通過引用傳遞。
import Cocoastruct 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)
以上程序執行輸出結果為:
優異成績:9896100糟糕成績:344213
以上實例中我們定義了結構體 markStruct,三個成員屬性:mark1, mark2 和 mark3。結構體內使用成員屬性使用 self 關鍵字。
從實例中我們可以很好的理解到結構體實例是通過值傳遞的。
TAG:程序員小新人學習 |