Swift中類與結構體間的區別
=================
兩者之間的關系
-
定義:結構體有0個或多個相同或者不同的數據組合而成的數據集合,其中那些數據或者方法被稱為結構體的成員或者是成員方法。
-
格式:
struct name:<:protocal>
{
var 成員1:數據類型
var 成員2:數據類型
….
}
- 要注意的地方:
- 結構體是值類型,其 實例將會被賦予變量或者常量和被函數調用時被復制
- 結構體中的成員可以包括屬性、類型別名、數組、其他結構體和枚舉聲明
- 結構體聲明不能包含析構器或者協議聲明,但是可以包括任意協議的實現,不能繼承類、枚舉、其他結構體
兩者間的區別
在我們實際的開發中,可能會糾結於應該是使用類還是結構體,在這里我也總結了一下類與結構體間的一些區別。
結構體:
///MARK: - 結構體
struct Car
{
var name: String!
init(name: String){
self.name = name
}
}
var p1 = Car(name: "bench")
var p2 = p1
p2.name = "BMW"
print(p2.name,p1.name)
/// 打印結果為BMW,bench
類:
///MARK: - 類
class Car
{
var name: String!
init(name: String){
self.name = name
}
}
var p1 = Car(name: "bench")
var p2 = p1
p2.name = "BMW"
print(p1.name,p2.name,p1.name)
/// 打印結果為BMW,BMW,BMW
從上面的結果可以看出來,再次給對象賦值,結構體不會改變,而類則會改變原來的值,所以說明類的對象是引用類型,而結構體是值類型。
還有的區別就是類是屬於面向對象編程,結構體屬於面向協議的編程,所謂面向協議編程其實就是面向對象的升級。在swift中推薦使用的是使用結構體,類在swift中不處於主流的地位,還有就是結構體也能夠實現類的全部功能,結構體更模塊化,默認實現初始化方法並且不用考慮ARC。
結構體只需要給出變量的類型,不用給出初始值
struct car {
var name: String
}
類則需要給出初始值
class car {
var name: String
init(name:String) {
self.name = name
}
}
上面兩種的效果一樣。
