類和結(jié)構(gòu)體(Classes and Structures)

Swift 并不要求你為自定義類和結(jié)構(gòu)去創(chuàng)建獨(dú)立的接口和實(shí)現(xiàn)文件直晨。你所要做的是在一個(gè)單一文件中定義一個(gè)類或者結(jié)構(gòu)體,系統(tǒng)將會(huì)自動(dòng)生成面向其它代碼的外部接口帜羊。

注意通常一個(gè)類的實(shí)例被稱為對(duì)象系吭。然而在 Swift 中咙鞍,類和結(jié)構(gòu)體的關(guān)系要比在其他語言中更加的密切谬擦,本章中所討論的大部分功能都可以用在類和結(jié)構(gòu)體上凹髓。因此,我們會(huì)主要使用實(shí)例而不是對(duì)象怯屉。

類和結(jié)構(gòu)體對(duì)比

Swift 中類和結(jié)構(gòu)體有很多共同點(diǎn)。共同處在于:

  • 定義屬性用于存儲(chǔ)值
  • 定義方法用于提供功能
  • 定義附屬腳本用于訪問值
  • 定義構(gòu)造器用于生成初始化值
  • 通過擴(kuò)展以增加默認(rèn)實(shí)現(xiàn)的功能
  • 實(shí)現(xiàn)協(xié)議以提供某種標(biāo)準(zhǔn)功能

與結(jié)構(gòu)體相比饵沧,類還有如下的附加功能:

  • 繼承允許一個(gè)類繼承另一個(gè)類的特征
  • 類型轉(zhuǎn)換允許在運(yùn)行時(shí)檢查和解釋一個(gè)類實(shí)例的類型
  • 解構(gòu)器允許一個(gè)類實(shí)例釋放任何其所被分配的資源
  • 引用計(jì)數(shù)允許對(duì)一個(gè)類的多次引用
定義語法
class SomeClass { 
// class definition goes here
}
struct SomeStructure { 
// structure definition goes here
}
因此請(qǐng)使用UpperCamelCase這種方式來命名(如SomeClass和SomeStructure等)锨络,以便符合標(biāo)準(zhǔn) Swift 類型的大寫命名風(fēng)格(如String,Int和Bool)狼牺。
請(qǐng)使lowerCamelCase這種方式為屬性和方法命名(如framerate和incrementCount)羡儿,以便和類型名區(qū)分。

結(jié)構(gòu)體和枚舉是值類型

值類型被賦予給一個(gè)變量是钥、常量或者被傳遞給一個(gè)函數(shù)的時(shí)候掠归,其值會(huì)被拷貝

我們已經(jīng)大量使用了值類型悄泥。實(shí)際上虏冻,在 Swift 中,所有的基本類型:整數(shù)(Integer)弹囚、浮點(diǎn)數(shù)(floating-point)厨相、布爾值(Boolean)、字符串(string)鸥鹉、數(shù)組(array)和字典(dictionary)蛮穿,都是值類型,并且在底層都是以結(jié)構(gòu)體的形式所實(shí)現(xiàn)毁渗。

在 Swift 中践磅,所有的結(jié)構(gòu)體和枚舉類型都是值類型。這意味著它們的實(shí)例灸异,以及實(shí)例中所包含的任何值類型屬性府适,在代碼中傳遞的時(shí)候都會(huì)被復(fù)制羔飞。

類是引用類型

與值類型不同,引用類型在被賦予到一個(gè)變量细溅、常量或者被傳遞到一個(gè)函數(shù)時(shí)褥傍,其值不會(huì)被拷貝。因此喇聊,引用的是已存在的實(shí)例本身而不是其拷貝恍风。

恒等運(yùn)算符

因?yàn)轭愂且妙愋停锌赡苡卸鄠€(gè)常量和變量在幕后同時(shí)引用同一個(gè)類實(shí)例誓篱。

如果能夠判定兩個(gè)常量或者變量是否引用同一個(gè)類實(shí)例將會(huì)很有幫助朋贬。為了達(dá)到這個(gè)目的,Swift 內(nèi)建了兩個(gè)恒等運(yùn)算符:

  • 等價(jià)于(===)
  • 不等價(jià)于(!==)
    運(yùn)用這兩個(gè)運(yùn)算符檢測兩個(gè)常量或者變量是否引用同一個(gè)實(shí)例:

指針

一個(gè)引用某個(gè)引用類型實(shí)例的 Swift 常量或者變量窜骄,與 C 語言中的指針類似锦募,但是并不直接指向某個(gè)內(nèi)存地址,也不要求你使用星號(hào)(*
)來表明你在創(chuàng)建一個(gè)引用邻遏。Swift 中的這些引用與其它的常量或變量的定義方式相同糠亩。

字符串(String)、數(shù)組(Array)准验、和字典(Dictionary)類型的賦值與復(fù)制行為

Swift 中赎线,許多基本類型,諸如String糊饱,Array和Dictionary類型均以結(jié)構(gòu)體的形式實(shí)現(xiàn)垂寥。這意味著被賦值給新的常量或變量,或者被傳入函數(shù)或方法中時(shí)另锋,它們的值會(huì)被拷貝滞项。

Objective-C 中NSString,NSArray和NSDictionary類型均以類的形式實(shí)現(xiàn)夭坪,而并非結(jié)構(gòu)體文判。它們?cè)诒毁x值或者被傳入函數(shù)或方法時(shí),不會(huì)發(fā)生值拷貝室梅,而是傳遞現(xiàn)有實(shí)例的引用律杠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市竞惋,隨后出現(xiàn)的幾起案子柜去,更是在濱河造成了極大的恐慌,老刑警劉巖拆宛,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗓奢,死亡現(xiàn)場離奇詭異,居然都是意外死亡浑厚,警方通過查閱死者的電腦和手機(jī)股耽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門根盒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人物蝙,你說我怎么就攤上這事炎滞。” “怎么了诬乞?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵册赛,是天一觀的道長。 經(jīng)常有香客問我震嫉,道長森瘪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任票堵,我火速辦了婚禮扼睬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悴势。我一直安慰自己窗宇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布特纤。 她就那樣靜靜地躺著担映,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叫潦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天官硝,我揣著相機(jī)與錄音矗蕊,去河邊找鬼。 笑死氢架,一個(gè)胖子當(dāng)著我的面吹牛傻咖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岖研,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卿操,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了孙援?” 一聲冷哼從身側(cè)響起害淤,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拓售,沒想到半個(gè)月后窥摄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡础淤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年崭放,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哨苛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡币砂,死狀恐怖建峭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情决摧,我是刑警寧澤亿蒸,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站蜜徽,受9級(jí)特大地震影響祝懂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拘鞋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一砚蓬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盆色,春花似錦灰蛙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宣旱,卻和暖如春仅父,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浑吟。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工笙纤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人组力。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓省容,卻偏偏與公主長得像,于是被迫代替她去往敵國和親燎字。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腥椒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容