美文网首页
Swift学习笔记-类和结构体

Swift学习笔记-类和结构体

作者: 女粉丝 | 来源:发表于2018-05-23 15:58 被阅读0次
    • 结构体会自动生成逐一构造器
    • 枚举和结构体都是值类型,每次传递的时候都是拷贝。即后面的改变不影响之前的。
    • 两个类实例指向同一个地址用 === 判断(等价于)。
    • swift中数组,字典均为结构体,为值类型。

    1.swift类和结构体有很多共同点:

    • 定义属性用于存储值
    • 定义方法用于提供功能
    • 定义下标操作使得可以通过下标语法来访问实例所包含的值
    • 定义构造器用于生成初始化值
    • 通过扩展以增加默认功能的实现
    • 实现协议已提供某种标准功能

    与结构相比,类还有如下的附加功能:

    • 继承允许一个类继承另外一个类的特征
    • 类型转换允许在运行时检查和解释一个类实例的类型
    • 析构器允许一个类实例释放任何其所被分配的资源
      +引用计数允许对一个类的多次引用
      (结构体总是通过复制的方式在代码)

    2.类和结构体的定义方式

    struct Resolution {
        var width = 0
        var height = 0
    }
    class VideoMode {
        var resolution = Resolution()
        var interlaced = false
        var frameRate = 0.0
        var name: String?
    }
    

    生成类或者结构体的实例用(),通过这种方法所创建的类或者结构体实例,其属性均会被初始化为默认值。

    let x = VideoMode()
    

    3.属性访问

    通过.语法可以访问实例的属性。

    print(x.frameRate)
    

    结构体都有一个自动生成的成员逐一构造器。类没有。

    let x = Resolution(width: 20, height: 20)
    

    4.结构体和枚举是值类型

    在 Swift 中,所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。

    5.类是引用类型

    let tenEighty = VideoMode()
    let alsoTenEighty = tenEighty
    alsoTenEighty.frameRate = 30.0
    

    这里alsoTenEighty是let修饰的,但是仍然可以修改属性frameRate,因为alsoTenEighty常量的值没有改变,只是改变了alsoTenEighty引用的frameRate的值,而frameRate是var修饰的。

    相关文章

      网友评论

          本文标题:Swift学习笔记-类和结构体

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