美文网首页
Swift 5 结构体与类

Swift 5 结构体与类

作者: 鬼把戏 | 来源:发表于2019-10-08 10:02 被阅读0次

    结构体: 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 结构体与类

          本文链接:https://www.haomeiwen.com/subject/umklyctx.html