Swift中的結構體
阿新 • • 發佈:2020-09-09
在Swift標準庫中,絕大多數的公開型別都是結構體,例如Bool、Int、Double、Array等常見型別都是結構體
所有的結構體都有一個編譯器自動生成的初始化器,宣告一個Test的結構體,程式碼如下:
struct Test { var x: Int var y: Int }
發現上面四種建立方式,只有第一種不會報錯,可以推斷出結構體的初始化,需要保證結構體中的變數具有初始值
我們可以用一下方式去驗證,改變結構體的宣告方式,對x、y分別進行賦值程式碼如下:
只對x進行賦值初始值
struct Test { var x: Int = 1 var y: Int }
只對y進行賦值:
struct Test { var x: Int var y: Int = 1 }
對x、y進行賦值:
struct Test { var x: Int = 1 var y: Int = 1 }
結構體是值型別,值型別賦值給var、let或者給函式傳參,是直接將所有內容拷貝一份,也就是深拷貝
var test = Test(x: 1, y: 1) var test1 = test print(Mems.ptr(ofVal: &test)) print(Mems.ptr(ofVal: &test1))//0x00007ffeea84c1b0 //0x00007ffeea84c1a0
相應的彙編程式碼:
movl $0x1, %eax movq %rax, %rdi movq %rax, %rsi movq %rax, -0x60(%rbp) callq 0x106503ba0 movq %rax, -0x30(%rbp) movq %rdx, -0x28(%rbp) movq %rax, -0x40(%rbp) movq %rdx, -0x38(%rbp)