類和結構體

  1. 相同點react

    1. 均可以用變量屬性存儲值
    2. 均可以用構造器初始化值
    3. 均可以定義函數
  2. 不一樣點swift

    1. 類能夠繼承,結構體不能繼承
    2. 類有引用計數,結構體沒有引用計數
    3. 類是引用類型,結構體是值類型,結構體傳遞時候是值的拷貝
    4. 結構體有成員逐一構造器,類沒有
  3. 簡單使用數組

struct Size {
    var width: Double = 0
    var heigtht: Double = 0
    
    func description() {
        print("width:\(width) height:\(heigtht)")
    }
}

class React {
    var size = Size()
    var area: Double {
        get {
            return size.width * size.heigtht
        }
    }
    
    func description() {
        print("size:\(size) area:\(area)")
    }
}

var size = Size()
var react = React()
size.description()
react.description()

react.size.width = 10
react.size.heigtht = 15
react.description()
複製代碼
  1. 結構體有成員逐一構造器
struct Size {
    var width: Double = 0
    var heigtht: Double = 0
    
    func description() {
        print("width:\(width) height:\(heigtht)")
    }
}

class React {
    var size = Size()
    var area: Double {
        get {
            return size.width * size.heigtht
        }
    }
    
    func description() {
        print("size:\(size) area:\(area)")
    }
}

var size = Size(width: 13, heigtht: 15)
size.description()
複製代碼
  1. 值類型和引用類型
    1. 結構體,枚舉體,字串,基本數據類型都是值類型
    2. 其實基本數據類型的底層都是結構體
    3. 值類型傳遞時候是值的拷貝,實際是兩塊獨立的內存
    4. 類是引用類型,引用類型傳遞是傳的引用,是共享一塊內存
enum Num {
    case one, two, three, four
}

var a = Num.one
var b = a

a = .three

if b == .one {
    print("內存獨立")
}
複製代碼
  1. 類是引用類型
struct Size {
    var width: Double = 0
    var heigtht: Double = 0
    
    func description() {
        print("width:\(width) height:\(heigtht)")
    }
}

class React {
    var size = Size()
    var area: Double {
        get {
            return size.width * size.heigtht
        }
    }
    
    func description() {
        print("size:\(size) area:\(area)")
    }
}

var size = Size(width: 13, heigtht: 15)
let size1 = size
size.width = 100
size1.description()


var react = React()
var react1 = react

react.size.width = 10
react.size.heigtht = 20
react1.description()
複製代碼
  1. 判斷是不是同一個實例的引用
    1. 判斷是否都是同一個實例的引用用等價於 ===, ! ==
    2. 判斷兩個引用是不是一個實例不能用==,會編譯不經過。
struct Size {
    var width: Double = 0
    var heigtht: Double = 0
    
    func description() {
        print("width:\(width) height:\(heigtht)")
    }
}

class React {
    var size = Size()
    var area: Double {
        get {
            return size.width * size.heigtht
        }
    }
    
    func description() {
        print("size:\(size) area:\(area)")
    }
}

var size = Size(width: 13, heigtht: 15)
let size1 = size
size.width = 100
size1.description()


var react = React()
var react1 = react
var react2 = React()

react.size.width = 10
react.size.heigtht = 20
react1.description()

if react1 === react {
    print("react1 === react")
}else{
    print("react1 !== react")
}

if react2 === react {
    print("react2 === react")
}else{
    print("react2 !== react")
}
複製代碼
  1. 類與結構體的選擇bash

    1. 該數據結構只是用來封裝一些簡單的數據 - 用結構體
    2. 該數據結構在傳遞時候是拷貝而不是傳引用 - 用結構體
    3. 該數據機構中存儲的值類型屬性也能被拷貝而不是引用 - 用結構體
    4. 該數據結構不用去繼承另外一個類來擁有父類的屬性和行爲 - 用結構體
  2. swift中的值傳遞數據結構

    1. swift中的基本數據類型,字串,數組,字典,枚舉,結構體底層都是用結構體來實現的,因此都是值類型。傳遞時候都是會發生拷貝。
    2. OC中的字典,數組是對象類型,也就是引用類型,因此咱們會用copy屬性。而swift中是值類型,因此不須要考慮copy了。
相關文章
相關標籤/搜索