在swift中有兩個很相似的宣告方式,分別是” struct” 和 “class”。
struct 是 call by value ( value type) , class 是 call by reference (reference type) 。
下面透過程式來解釋其中的不同
首先,先建立一個名為 Svalue的 struct且內有一個值為0的變數 x,另外宣告兩個變數 f1, f2。
將x得值分別assign給f1,f2後再將一個常數30分配給f2
struct Svalue {
var x:Int = 0
}
var f1 = Svalue()
var f2 = f1
f2.x = 30
print("The value of x in f1 is \(f1.x)")
print("The value of x in f2 is \(f2.x)")
結果可以知道f1和f2分別為不同的想個記憶體區塊,所以值會不相同)
同樣的也建立一個名為Cvalue的class並含有一個值為0的變數y,
宣告兩個變數 f3, f4。
將y得值分別assign給f3,f4後再將一個常數50分配給f4
class Cvalue {
var y:Int = 0
}
var f3 = Cvalue()
var f4 = f3
f4.y = 50
print(“The value of y in f1 is \(f3.y)")
print("The value of y in f1 is \(f4.y)")
結果可以得知,因為f3,f4 指向同樣的記憶體位置,因此最後將50 assign給f4時,f3同樣也會是50
另外print出 class與 struct的生成資料也是有不同
Struct:
struct boy{
var name = "Jason"
var age = 18
}
let cuteBoy = boy()
print(cuteBoy)
可以直接列印出生成資料
Class
class girl {
var name = "kate"
var age = 17
}
let cuteGirl = girl()
print(cuteGirl)
print(cuteGirl.name,cuteGirl.age)
不能直接列印出生成資料,而要取得函數內的屬性才可以列印
HI~看起來class跟struct相似處很多,但swift中還是會分別使用class跟struct。
請問兩者的使用時機是什麼呢?