Swift 5 结构体与类

结构体: Bool、Int、Double、String、Array、Dictionary等常见的类型都是结构体

  • 结构体都有一个编译器自动生成的的初始化器(initializer,初始化方法,构造器,构造方法)
  • 编译器根据情况可能会为结构体生成g多个初始化器,保证所有成员都有初始值
  • 定义结构体时在结构体内自定义了初始化器,编译器j就不会生成t其他的初始化器
  • 内部内存结构是连续的,实际占用是成员的内存大小,分配的要看内存对齐
struct Point {
    var x: Int
    var y: Int = 1
    var z: Int?
    
}

struct Point1 {
    var x: Int
    var y: Int
    
    init() {
        x = 0
        y = 0
    }
}



struct Point2 {
    var x: Int
    var y: Int
    
    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

  • 类的定义与结构体类似,但编译器没有生成可以传入成员值得初始化器
  • 类的所有成员在定义时指定了初始值,编译器会生成无参的初始化器,成员的初始化在这个初始化器中完成

结构体与类的区别

  • 结构体是值类型(枚举也是),类是引用类型(指针类型)

值类型

  • 值类型给 let、var 赋值或者给函数传参时,是直接将所有内容拷贝一份,属于深拷贝
  • Swift 标准库中为了提升性能,String、Array、Dictionary、Set 采取 Copy On Write 的技术(仅当有"写"的操作时才会真的进行拷贝操作)

引用类型

  • 引用类型给 let、var 赋值或者传参,是将储存的内存地址拷贝一份

你可能感兴趣的:(Swift 5 结构体与类)