iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 16
1
Software Development

30 天上手 iOS App 開發系列 第 19

30 天上手 iOS App 開發 DAY 19

今天來聊聊 Class 與 Struct 的差異
在開始之前我們必須先理解 “傳址” 與 “傳值” 的差異,也就是 Reference Type 與 Value Type 的差異
Call by Reference
不會另外建創造一個物件,它會把指向位置的指標傳入,簡單來說就是拿到同一個物件
Call by Value
會建立一個新的獨立的物件,來儲存你傳入的參數,簡單來說就是複製一份但是不是同一個物件

Class

class Cat{
    var name:String
    init(_ name:String) {
        self.name = name
    }
}

這邊宣告一個看記憶體指標的函示

func printAddress(_ str:UnsafeMutablePointer<String>){
    print(str)
}
var myCat = Cat("Coco")
print(myCat.name)        // Coco
printAddress(&myCat.name)  //0x0000604000054680
var tempCat = myCat
myCat.name = "Dabe"      
printAddress(&tempCat.name)   //0x0000604000054680
print(myCat.name)         //  Dabe

可以看到 myCat 跟 tempCat 指向同一個記憶體位址當今天改動 tempCat 的值 myCat 的值也會跟者改變

struct Dog {
    var name:String
    init(_ name:String) {
        self.name = name
    }
}
var myDog = Dog("Lucky")
printAddress(&myDog.name) //0x00000001165eaed0
print(myDog.name)       //Lucky
var tempDog = myDog
tempDog.name = "Nancy"
printAddress(&tempDog.name)    //0x00000001165eaee8
print(myDog.name)        //Lucky

這時候 myDog 跟 tempDog 指向不同一個記憶體位址當今天改動 tempDog 的值 myDog 的值是不會變的


上一篇
30 天上手 iOS App 開發 DAY 18
下一篇
30 天上手 iOS App 開發 DAY 20
系列文
30 天上手 iOS App 開發28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言