美文网首页iOS DeveloperiOS 开发 swift 文章收集
Swfit - 类 class 与结构体 struct 的区别

Swfit - 类 class 与结构体 struct 的区别

作者: 小黑Swift | 来源:发表于2016-06-19 13:14 被阅读209次

    class 与 struct 的主要区别:类是引用类型,而结构体是值类型。

    没图说个J8,好,看图说话。

    class 引用类型
    //类 - 引用类型
    
    class 未成型人类 {
        var 身高 = 168
        init() { }
        
        init(身高: Int) {
            self.身高 = 身高
        }
    }
    
    let 小华 = 未成型人类()
    
    let 大明 = 未成型人类(身高: 200)
    let 黑仔 = 大明
    let 高佬 = 大明
    高佬.身高 += 10
    print(大明.身高) // = 210
    
    let 小高 = 高佬
    小高.身高 += 10
    print(大明.身高) // = 220
    
    struct 值类型
    //结构体 - 值类型
    
    struct 克隆人 {
        var 身高 = 180
        init() { }
        init(身高: Int) {
            self.身高 = 身高
        }
    }
    
    var 小A = 克隆人()
    小A.身高 = 122
    let cokeA = 小A
    print(cokeA.身高) // = 122
    print(小A.身高) // = 122
    
    let 小B = 克隆人()
    print(小A.身高) // = 180
    

    什么时候使用类? 什么时候使用结构体?

    注意:虽说赋值时候值类型表面上经常要执行拷贝现象,但 Swift 在管理所有的值拷贝会确保性能最优化,所以我们没有必要去回避赋值来确保性能最优化。

    /* 什么时候使用类? 什么时候使用结构体?
     一般情况下,可以:
    1⃣ 把类看成是物体
     如: 人、车、动物、商店等..一般跟生物沾边多
     比如一个人有少属性,虽有不同人种,但是他们很多属性都是一样的,使用类的继承关系,很好描述人这一类东东...
     
    2⃣ 把结构体看作值
     如:位置(经纬度)、坐标、温度等..一般跟物理沾边多
     结构体比类更加 “轻量级”,因为结构体的内存空间是开在系统的栈中,而类则开在系统的堆中。当然对于小程序来说,可以忽略不计。
    
     还有什么时候使用也不是绝对的,因为他们都有很多类似的地方,也看个人习惯思维爱好之类。何况现在 Swift 还有给力协议这东西,所以原来只能通过类来实现的,也可以通过协议+来实现。

    相关文章

      网友评论

        本文标题:Swfit - 类 class 与结构体 struct 的区别

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