Swift学习(八:类和结构体)

作者: 爱偷懒的万万 | 来源:发表于2016-07-26 16:28 被阅读20次
    1.首先进行一下类和结构体的对比:
    • 共同点:
      定义属性用于存储值
      定义方法用于提供功能
      定义构造器用于生成初始化值
      通过扩展增加默认实现的功能
      实现协议提供某种标准功能

    • 类还有更多功能:
      允许继承
      引用计数允许对一个类的多次引用

    2.实例化类和结构体语法
        class Some{}
        struct SomeStuct{}
    
    3.
    • 结构体中属性的访问通过点语法。

    • 结构体都有一个自动生成的成员主意构造器。

    • 结构体和枚举是值类型,创建多个结构体对象事,是对值的复制,而不是指向相同实例

        struct SomeStru{
                var width= 0
                var height =0
        }
        let some = SomeStru()
        some.width = 10
      
        let one = some
        one.width = 20
        print("\(one.width).....\(some.width)")       //  20...10
      

    在将some赋值给one时,实际上是将some里的值拷贝给了one,将拷贝的值存入新的SomeStru实例中。someone相互独立,不会影响互相的值。

    • 类是引用类型,在被赋值到一个变量或常量时,值不会被拷贝,引用的是已经存在的实例本身而不是值拷贝
    4.恒等运算符:判断两个常量或变量是否引用同一个实例
    • 等价于===表示两个类类型(class type)的常量或者变量引用同一个类实例
    • 不等价于 !==表示两个实例的值“相等”或“相同”,判定时要遵照设计者定义的评判标准,因此相对于“相等”来说,这是一种更加合适的叫法。
    5.类和结构体的选择

    以下考虑结构体:

    • 该数据结构的主要目的是用来封装少量相关简单数据值。
    • 有理由预计该数据结构的实例在被赋值或传递时,封装的数据将会被拷贝而不是被引用。
    • 该数据结构中储存的值类型属性,也应该被拷贝,而不是被引用。
    • 该数据结构不需要去继承另一个既有类型的属性或者行为。
    6.字符串(String)、数组(Array)、和字典(Dictionary)类型的赋值与复制行为
    • Swift 中,许多基本类型,诸如String,Array和Dictionary类型均以结构体的形式实现。这意味着被赋值给新的常量或变量,或者被传入函数或方法中时,它们的值会被拷贝。

    • Objective-C 中NSString,NSArray和NSDictionary类型均以类的形式实现,而并非结构体。它们在被赋值或者被传入函数或方法时,不会发生值拷贝,而是传递现有实例的引用。

    相关文章

      网友评论

        本文标题:Swift学习(八:类和结构体)

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