Swift中的結構體

在Swift標準庫中,絕大多數的公開類型都是結構體,例如Bool、Int、Double、Array等常見類型都是結構體函數

全部的結構體都有一個編譯器自動生成的初始化器,聲明一個Test的結構體,代碼以下:spa

struct Test {
      var x: Int
      var y: Int
 }

發現上面四種建立方式,只有第一種不會報錯,能夠推斷出結構體的初始化,須要保證結構體中的變量具備初始值3d

咱們能夠用一下方式去驗證,改變結構體的聲明方式,對x、y分別進行賦值代碼以下:code

只對x進行賦值初始值blog

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或者給函數傳參,是直接將全部內容拷貝一份,也就是深拷貝class

var test = Test(x: 1, y: 1)
var test1 = test
print(Mems.ptr(ofVal: &test))
print(Mems.ptr(ofVal: &test1))

//0x00007ffeea84c1b0
//0x00007ffeea84c1a0

相應的彙編代碼:test

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)
相關文章
相關標籤/搜索