Swift-Optional&Equatable&訪問控制權(quán)限

Optional

  • Optional是通過enum實(shí)現(xiàn)的一個(gè)非常好的代表凝果,這里我們可以通過閱讀Optional的源碼來看一下:
    image
  • 可以看到Optional本質(zhì)上是一個(gè)枚舉,當(dāng)前枚舉接受一個(gè)泛型參數(shù)具钥,而當(dāng)前some關(guān)聯(lián)的值是Wrapped豆村,也就是說下面兩種寫法是一樣的
var age : Int?
var age : Optional<Int>
  • 枚舉我們可以通過模式匹配來匹配對(duì)應(yīng)的值
var age : Int? = 10

switch age {
    case .none :
        print("nil")
    case .some(10) :
        print(10)
    default :
        print("default")
}

Optional解包

  • 涉及到Optional我們就不得不面對(duì)一個(gè)問題:解包。因?yàn)楫?dāng)前的可選項(xiàng)其實(shí)是對(duì)我們的值做了包裝骂删, 當(dāng)前不為nil的時(shí)候我們就需要從其中拿到我們要的值掌动。

強(qiáng)制解包

  • 簡(jiǎn)單粗暴,但是如果值為nil就會(huì)崩潰


    image

if let&guard let

  • 實(shí)際開發(fā)中解包通常是使用if letguard let宁玫,這里我們是通過可選項(xiàng)綁定的方式來判斷當(dāng)前的可選項(xiàng)是否有值粗恢,我們看一下寫法:
if let tmp = age {
    print(tmp)
}else{
    print("nil")
}

func test() {
    
    guard let guardTmp = age else {return}
    
    print(guardTmp)
}

test()
  • 可以看到guard后面的判斷條件為else的時(shí)候會(huì)執(zhí)行當(dāng)前大括號(hào)里面的內(nèi)容,反之執(zhí)行后面的代碼欧瘪。guard在我們當(dāng)前這句代碼里面作用就是如果當(dāng)前age為空眷射,我們就退出我們當(dāng)前函數(shù)。
  • 其次佛掖,大家來看一個(gè)點(diǎn):我們?cè)谑褂?code>if let創(chuàng)建的內(nèi)容當(dāng)中tmp僅僅只能在當(dāng)前if分支的大括號(hào)內(nèi)訪問到妖碉,而我們當(dāng)前的guard定義的guardTmp在當(dāng)前大括號(hào)外部也是能訪問到的。

Equatable

  • Swift中的類型芥被,可以通過遵循Equatable協(xié)議來使用相等運(yùn)算符==和不等運(yùn)算符?=來比較兩個(gè)值相等還是不相等欧宜。Swift標(biāo)準(zhǔn)庫中絕大多數(shù)的類型都默認(rèn)實(shí)現(xiàn)了Equatable協(xié)議。
var age = 10
var age1 : Int = 10

var isEqual = age == age1
print(isEqual)
// 返回結(jié)果為true
  • 對(duì)于Int來說拴魄,系統(tǒng)默認(rèn)實(shí)現(xiàn)了==冗茸,對(duì)于我們自定義的的類型,我們需要遵循Equatable協(xié)議
  • 如果是值類型
struct XQTeacher : Equatable{
    var age : Int
    var name : String
}

var t = XQTeacher(age: 18, name: "xq")

var t1 = XQTeacher(age: 19, name: "xq")

var t2 = XQTeacher(age: 18, name: "xq")

print(t == t1)
print(t == t2)
// 返回結(jié)果為false true 
  • 觀察下sil代碼匹中,看看它是怎么實(shí)現(xiàn)的夏漱,系統(tǒng)幫我們實(shí)現(xiàn)了一個(gè)函數(shù)


    image
  • 函數(shù)的實(shí)現(xiàn),通過取出兩個(gè)結(jié)構(gòu)體顶捷,取出結(jié)構(gòu)體的屬性依次比較


    image
  • 如果是引用類型挂绰,編譯器就會(huì)報(bào)錯(cuò),需要我們實(shí)現(xiàn)對(duì)應(yīng)的函數(shù)==

    image

  • 根據(jù)提示完善代碼

class XQTeacher : Equatable{
    static func == (lhs: XQTeacher, rhs: XQTeacher) -> Bool {
        return lhs.age == rhs.age && lhs.name == rhs.name
    }
    
    
    var age : Int
    var name : String
    
    init(age : Int , name :String) {
        self.age = age
        self.name = name
    }
}

var t = XQTeacher.init(age: 18, name: "xq")

var t1 = XQTeacher.init(age: 19, name: "xq")

print(t == t1)
  • 經(jīng)過上面的學(xué)習(xí)服赎,可以看到==用來檢驗(yàn)值是否相等扮授,也就是equal to;
  • ===是用來檢驗(yàn)兩個(gè)對(duì)象是否是同一個(gè)實(shí)例對(duì)象是否是同一個(gè)

訪問控制權(quán)限

  • Swift當(dāng)中主要是針對(duì)其他源文件和模塊對(duì)你代碼的訪問控制芳室,這里我們先來總結(jié)一下Swift中的有關(guān)訪問控制權(quán)限的關(guān)鍵字
    • private:訪問級(jí)別僅在當(dāng)前定義的作用域內(nèi)有效
    • filePrivate:此訪問限制僅限制在當(dāng)前定義的源文件中
    • Internal:默認(rèn)訪問級(jí)別 允許定義模塊中的任意源文件訪問专肪,但不能被該模塊之外的任意源文件訪問
    • public: 開放式訪問刹勃,使我們能夠在其定義模塊的任何源文件中使用代碼,并且可以從另一個(gè)源文件訪問源文件嚎尤。只能在定義的模塊中繼承和子類的重寫
    • Open:最不受限制的訪問級(jí)別
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荔仁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芽死,更是在濱河造成了極大的恐慌乏梁,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件关贵,死亡現(xiàn)場(chǎng)離奇詭異遇骑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)揖曾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門落萎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炭剪,你說我怎么就攤上這事练链。” “怎么了奴拦?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵媒鼓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我错妖,道長(zhǎng)绿鸣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任暂氯,我火速辦了婚禮潮模,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘株旷。我一直安慰自己再登,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布晾剖。 她就那樣靜靜地躺著锉矢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪齿尽。 梳的紋絲不亂的頭發(fā)上沽损,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音循头,去河邊找鬼绵估。 笑死炎疆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的国裳。 我是一名探鬼主播形入,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缝左!你這毒婦竟也來了亿遂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤渺杉,失蹤者是張志新(化名)和其女友劉穎蛇数,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體是越,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耳舅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倚评。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浦徊。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蔓纠,靈堂內(nèi)的尸體忽然破棺而出辑畦,到底是詐尸還是另有隱情,我是刑警寧澤腿倚,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布纯出,位于F島的核電站,受9級(jí)特大地震影響敷燎,放射性物質(zhì)發(fā)生泄漏暂筝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一硬贯、第九天 我趴在偏房一處隱蔽的房頂上張望焕襟。 院中可真熱鬧,春花似錦饭豹、人聲如沸鸵赖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽它褪。三九已至,卻和暖如春翘悉,著一層夾襖步出監(jiān)牢的瞬間茫打,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留老赤,地道東北人轮洋。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像抬旺,于是被迫代替她去往敵國和親弊予。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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