Swift 3.0 beta 6權(quán)限訪問修改

原帖地址: https://kemchenj.github.io/2016/08/17/2016-08-17/

前兩天 swift 3.0 更新了 beta 6, 權(quán)限訪問的幾個(gè)關(guān)鍵字有了一些改變, 這篇文章給大家簡單介紹一下(真得很簡單...)

還有一些小改變, 其中幾個(gè)讓人覺得很詭異:

  • 很多 Core xx 的庫把 swift原生的 Array 改成了 CFArray, 很多時(shí)候需要用 as 去轉(zhuǎn)換(swift runtime 目前唯一一個(gè)比較顯眼的功能...)
  • 聲明閉包的時(shí)候不能帶顯式 argument label, 例如typealias completion = (data: Data, error: Error?) -> Void就會(huì)報(bào)錯(cuò), 必須加上_或者刪掉參數(shù)標(biāo)簽
  • 還有就是現(xiàn)在閉包作為參數(shù)傳入的時(shí)候默認(rèn)都是@nonescaping的, 如果閉包不是在當(dāng)前作用域內(nèi)執(zhí)行而是還要繼續(xù)傳遞到別的函數(shù)里的話, 那就必須加上@escaping
  • 引入了 Objective-C 的 id, 在 Swift 叫做Any, 之前很多接口都從 AnyObject 改成了 Any, 而 Any 是沒有 subscript 方法的, 看也就是說不能用鍵值對取值, 很多原本要通過鍵值對取值的寫法都得先把類型強(qiáng)轉(zhuǎn)成字典或者是 Anyobject?

新增 open 關(guān)鍵字, public 變得沒那么 public

beta 6 新增加了 open 關(guān)鍵字, 可以理解為之前的 public

在同一個(gè)包 module 內(nèi), public 跟 open 的含義是一樣的, 但是在 module 外, open 聲明的成員變量和函數(shù)是可以被 override 的, 而 public 只是把接口公開出去, 而不能被 override

open 大概有這么幾個(gè)規(guī)則:

  • 一個(gè)類可以被聲明為 open.
  • 一個(gè)類不能同時(shí)聲明 openfinal
  • 一個(gè) open 的類的父類必須也是 open 的, 父類的父類也必須會(huì)被按照這條規(guī)則遞歸約束

這個(gè)主要是區(qū)分開 Module 外可訪問Module 外可被修改這兩個(gè)概念, 具體可以看[SE-0117]Allow distinguishing between public access and public overridability提案

//--------Module Foo-------
class Foo {
    public var one: Int {
        return 1
    }

    open var two: Int {
        return 2
    }

}

class A: Foo {
    // 正常運(yùn)行
    override var one: Int {
        return 2
    }

    // 正常運(yùn)行
    override var two: Int {
        return 1
    }
}
//------End of Module------



//--------Module Bar-------
class B: Foo {
    // 報(bào)錯(cuò)
    override var one: Int {
        return 2
    }

    // 正常運(yùn)行
    override var two: Int {
        return 1
    }
}
//------End of Module------

另外還有一點(diǎn), 就是 Objective-C 的庫導(dǎo)入的話默認(rèn)都為 open, 之前是 public

新增moduleprivatefileprivate, 而 private 變得更加 private

這一次還新增了一個(gè) moduleprivate, 從字面意義上來說跟 internal 很像, 我現(xiàn)在還不太清楚到底跟 internal 有什么具體的區(qū)別, 在 Swift Evolution 和 Xcode 的 Release Note 里都沒有找到具體的解釋

為了權(quán)限安全, 我們很多時(shí)候都會(huì)在變量和實(shí)現(xiàn)的函數(shù)前面加上 private, 現(xiàn)在需要改成 fileprivate, fileprivate 跟之前的 private 基本上一樣

private 現(xiàn)在就更加 private, 只能在當(dāng)前作用域內(nèi)發(fā)生作用, 同一文件里 extension 里也是不能訪問的到 private 修飾的成員變量

//---- 文件 Foo.swift ----
class  {
    fileprivate var one = 1

    private func two() {...}
}

extension Foo {
    func printOne() {
        print(one) // 正常運(yùn)行
    }
    
    func printTwo() {
        print(two) // 報(bào)錯(cuò)
    }
}
//--------- EOF ---------



//-- 文件 Foo+Bar.swift --
extension Foo {
    // 都報(bào)錯(cuò)
    func printOneAgain() {
        print(one)
    }
    
    func printTwoAgain() {
        print(two)
    }
}
//--------- EOF ---------

參考鏈接

What is the 'open' keyword in Swift?

[SE-0117]Allow distinguishing between public access and public overridability

#22 Swift 3 Access Control (Xcode 8 Beta 6)

初級(jí) iOS 開發(fā), 廣州地區(qū)求職 ing
簡歷: https://kemchenj.github.io/resume.html
聯(lián)系方式: chenkem95@outlook.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子楔脯,更是在濱河造成了極大的恐慌,老刑警劉巖坟乾,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迹辐,死亡現(xiàn)場離奇詭異蝶防,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)明吩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門间学,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事低葫∠晗郏” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵嘿悬,是天一觀的道長实柠。 經(jīng)常有香客問我,道長善涨,這世上最難降的妖魔是什么窒盐? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮钢拧,結(jié)果婚禮上蟹漓,老公的妹妹穿的比我還像新娘。我一直安慰自己源内,他們只是感情好葡粒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膜钓,像睡著了一般嗽交。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颂斜,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天轮纫,我揣著相機(jī)與錄音,去河邊找鬼焚鲜。 笑死掌唾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的忿磅。 我是一名探鬼主播糯彬,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼葱她!你這毒婦竟也來了撩扒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對情侶失蹤吨些,失蹤者是張志新(化名)和其女友劉穎搓谆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豪墅,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泉手,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了偶器。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斩萌。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缝裤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颊郎,到底是詐尸還是另有隱情憋飞,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布姆吭,位于F島的核電站榛做,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏内狸。R本人自食惡果不足惜瘤睹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望答倡。 院中可真熱鬧轰传,春花似錦、人聲如沸瘪撇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倔既。三九已至恕曲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渤涌,已是汗流浹背佩谣。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留实蓬,地道東北人茸俭。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像安皱,于是被迫代替她去往敵國和親调鬓。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 【Swift 3.1】24 -訪問權(quán)限 (Access Control) 自從蘋果2014年發(fā)布Swift酌伊,到現(xiàn)在...
    Lebron_James閱讀 2,174評(píng)論 5 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理腾窝,服務(wù)發(fā)現(xiàn),斷路器居砖,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • "Unterminated string literal.": "未終止的字符串文本虹脯。", "Identifier...
    兩個(gè)心閱讀 8,318評(píng)論 0 4
  • 實(shí)習(xí)第一周做的分享題目,貼一下 微博營銷150元50個(gè)小時(shí)500萬次曝光APP排名TOP40如何做到奏候? 前幾天在微...
    小青年Neal閱讀 383評(píng)論 0 6
  • 我一直相信“相信”的力量 我喜歡你循集。 我喜歡你。 你相信嗎鼻由? 嗯暇榴,有沒有那么一瞬間發(fā)現(xiàn)自己心里已經(jīng)泛起漣漪厚棵?畢竟蕉世,...
    我及我閱讀 469評(píng)論 0 0