Swift中class類和struct結構體的區(qū)別

struct比class更“輕量級”(struct更快绝编,class可以承載更多的東西)
就區(qū)別來說:

1迫卢、struct會自動生成需要的構造方法(constructor)扁誓,哪個屬性沒有賦初始值就會生成以哪個屬性為參數(shù)的構造方法。而class沒有尿瞭,要自己寫
// 結構體(值類型)
struct Resolution {
    var width = 0
    var height = 0
}
let _:Resolution = Resolution(width: 1, height: 3)//結構體類型的成員逐一構造器


// 類(引用類型)
class VideoMode {
    var resolution = Resolution()
    var name: String?
}
let someVideoMode:VideoMode = VideoMode()
2闽烙、struct的屬性可以不賦初始值,而class的屬性必須賦初始值或者設為可選類型
// 結構體(屬性可以不賦初始值)
struct Resolution {
    var width:Int
    var height:Int
}
let _:Resolution = Resolution(width: 1, height: 3)

// 類(引用類型)
class VideoMode {
    // 屬性必須賦初始值,或者設為可選類型
    var resolution = Resolution(width: 1, height: 2)
    var name: String?
}

如果類沒有賦初始值或者設為可選類型声搁,那么就會報錯cannot be constructed because it has no accessible initializers

3.struct是值類型(Value Type)分配在棧中,是深拷貝黑竞。class是引用類型(Reference Type)配在堆中,淺拷貝疏旨。

因為struct是值類型放在棧中很魂,那么也就是說struct的釋放不歸自動引用計數(shù)器管

        //結構體(值類型),深拷貝
        var struct1 = Resolution(width: 1, height: 1)
        var struct2 = struct1
        struct2.width = 2
        print("struct1 = \(struct1)") // 打印結果:struct1 = Resolution(width: 1, height: 1)
        
        //類(引用類型)檐涝,淺拷貝
        var class1 = VideoMode.init()
        class1.name = "class1"
        var class2 = class1
        class2.name = "class2"
        print("class1 = \(class1.name)") // 打印結果:class1 = Optional("class2")

4遏匆、不可變實例的不同
        let class3 = VideoMode.init()
        class3.name = "class3" //可以修改
        
        let struct3 = Resolution(width: 2, height: 4)
        struct3.height = 4 //報錯 Cannot assign to property: 'struct3' is a 'let' constant
5、在實例方法中修改值類型骤铃,struct需要在方法前加上mutating
// 結構體(值類型)
struct Resolution {
    var width = 0
    var height = 0
    mutating func changeWidth(width: Int) {
        self.width = width
    }
}

// 類(引用類型)
class VideoMode {
    // class的屬性必須賦初始值或者設為可選類型
    var resolution = Resolution()
    var name: String?
    
    func changeName(name: String) {
        self.name = name
    }
}

6拉岁、 class中可以有單例對象屬性,struct中不能有
7惰爬、struct不能繼承,class可以繼承
8惫企、NSUserDefaults:Struct 不能被序列化成 NSData 對象,無法歸解檔
9撕瞧、當你的項目的代碼是 Swift 和 Objective-C 混合開發(fā)時,你會發(fā)現(xiàn)在 Objective-C 的代碼里無法調用 Swift 的 Struct狞尔。因為要在 Objective-C 里調用 Swift 代碼的話丛版,對象需要繼承于 NSObject。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末偏序,一起剝皮案震驚了整個濱河市页畦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌研儒,老刑警劉巖豫缨,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件独令,死亡現(xiàn)場離奇詭異,居然都是意外死亡好芭,警方通過查閱死者的電腦和手機燃箭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舍败,“玉大人招狸,你說我怎么就攤上這事×谑恚” “怎么了裙戏?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長厕诡。 經(jīng)常有香客問我挽懦,道長,這世上最難降的妖魔是什么木人? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任信柿,我火速辦了婚禮,結果婚禮上醒第,老公的妹妹穿的比我還像新娘渔嚷。我一直安慰自己,他們只是感情好稠曼,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布形病。 她就那樣靜靜地躺著,像睡著了一般霞幅。 火紅的嫁衣襯著肌膚如雪漠吻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天司恳,我揣著相機與錄音途乃,去河邊找鬼。 笑死扔傅,一個胖子當著我的面吹牛耍共,可吹牛的內容都是我干的。 我是一名探鬼主播猎塞,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼试读,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荠耽?” 一聲冷哼從身側響起钩骇,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后倘屹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體银亲,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年唐瀑,在試婚紗的時候發(fā)現(xiàn)自己被綠了群凶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡哄辣,死狀恐怖请梢,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情力穗,我是刑警寧澤毅弧,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站当窗,受9級特大地震影響够坐,放射性物質發(fā)生泄漏。R本人自食惡果不足惜崖面,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一元咙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巫员,春花似錦庶香、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至七扰,卻和暖如春奢赂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颈走。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工膳灶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疫鹊。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓袖瞻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拆吆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容