Swift中的结构体

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

 

posted @ 2020-09-09 22:50  木子沉雨  阅读(292)  评论(0编辑  收藏  举报