• 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)
  • 相关阅读:
    VMware搭建VMware ESXi 6.7
    77. Combinations
    47. Permutations II
    system design
    37. Sudoku Solver
    12月9日学习日志
    12月8日学习日志
    12月7日学习日志
    12月6日学习日志
    12月5日学习日志
  • 原文地址:https://www.cnblogs.com/muzichenyu/p/13642776.html
Copyright © 2020-2023  润新知