Swift鏈?zhǔn)秸{(diào)用的安全性

文中引用到的:
SnapKit
Alamofire
Bees

鏈?zhǔn)秸Z法在開發(fā)很常見猫十。iOS上的許多開源庫都使用了鏈?zhǔn)秸Z法。比如說SnapKitAlamofire等呆盖。


像以上SnapKit的這種情況拖云,鏈?zhǔn)秸{(diào)用為了靈活的添加各種約束屬性。每次調(diào)用后都是返回ConstraintMakerExtendable的實例应又。
但是這樣就產(chǎn)生了一個問題:沒有辦法在編譯時期檢查被連起來的成員結(jié)構(gòu)V嫦睢!

像以上的情況實際上是不能產(chǎn)生正確的約束株扛,但是在編譯期間編譯器沒有辦法給出提示尤筐,因為并沒有語法錯誤汇荐。
那么如解決這個問題呢?
在Swift上可以利用泛型協(xié)議拓展

舉個例子

比如動物之間只有同樣的種類才可以互相喜歡盆繁。那先定義一個函數(shù)表示喜歡這個行為掀淘。

在定義兩個不同的動物類

好,我們來試一下

嗯油昂,看起來是正常工作了革娄。Dog和Dog可以like,Dog和Cat不可以冕碟!因為like函數(shù)里的left與right兩個參數(shù)類型必須要相同拦惋。不同的話,編譯器就會提示錯誤了鸣哀!

但是好像哪里不對凹芗伞!這和鏈?zhǔn)秸{(diào)用有個屁關(guān)系拔页摹叹放!
別著急。

為了達(dá)成一開始的目標(biāo)挠羔。我們先定義一個協(xié)議井仰。

然后修改下like函數(shù)。

T必須為Animal類型破加,這樣可以使like可以使用聲明在Animal協(xié)議中的方法屬性等俱恶。。范舀。
然后拓展Animal協(xié)議

當(dāng)然這個時候Dog類和Cat類都要遵循Animal協(xié)議

來試一下

嗯合是!鏈?zhǔn)秸{(diào)用可以用了。

但是不對啊

這樣子也可以锭环!前面的兩個是不對的cat和dog是不能like聪全。但是編譯時也沒有報錯。因為只要鏈?zhǔn)阶詈蟮哪莻€對象類型相同就可以了辅辩!并沒有解決問題澳牙瘛!
其實我們已經(jīng)快要完成了只要給動物類加個泛型用來記錄左邊已經(jīng)鏈起來的類型就可以了玫锋!

這就是最后的版本了蛾茉!
試一下正確的情況

錯誤的情況

不管鏈的多長,只要連起來的所有對象中有一對類型不匹配撩鹿,就不能通過編譯谦炬!
但是以上的例子中只保留了鏈起來的最后一個對象!實際的應(yīng)用中节沦,應(yīng)該是要保留連起來的所有對象的吧寺。不然就沒有意義了窜管。

說了這么多!有什么實際的意義呢稚机?
回到開頭的SnapKit幕帆,使用鏈?zhǔn)秸{(diào)用創(chuàng)建約束時,就可以使用以上的方法來降低程序的錯誤率赖条。因為錯誤的寫法不能通過編譯笆!雖然減少了一點點靈活性纬乍,但是安全性提高很多碱茁。

我在自己的自動布局庫里就用了這種方法:點這里Bees

Bees

top和left是不能創(chuàng)建約束的,所以在編譯時就提出了錯誤仿贬!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纽竣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子茧泪,更是在濱河造成了極大的恐慌蜓氨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件队伟,死亡現(xiàn)場離奇詭異穴吹,居然都是意外死亡,警方通過查閱死者的電腦和手機嗜侮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進(jìn)店門港令,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锈颗,你說我怎么就攤上這事顷霹。” “怎么了击吱?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵淋淀,是天一觀的道長。 經(jīng)常有香客問我姨拥,道長绅喉,這世上最難降的妖魔是什么渠鸽? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任叫乌,我火速辦了婚禮,結(jié)果婚禮上徽缚,老公的妹妹穿的比我還像新娘憨奸。我一直安慰自己,他們只是感情好凿试,可當(dāng)我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布排宰。 她就那樣靜靜地躺著似芝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪板甘。 梳的紋絲不亂的頭發(fā)上党瓮,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天,我揣著相機與錄音盐类,去河邊找鬼寞奸。 笑死,一個胖子當(dāng)著我的面吹牛在跳,可吹牛的內(nèi)容都是我干的枪萄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼猫妙,長吁一口氣:“原來是場噩夢啊……” “哼瓷翻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起割坠,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤齐帚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后韭脊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體童谒,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年沪羔,在試婚紗的時候發(fā)現(xiàn)自己被綠了饥伊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔫饰,死狀恐怖琅豆,靈堂內(nèi)的尸體忽然破棺而出辽俗,到底是詐尸還是另有隱情鹦马,我是刑警寧澤孵构,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布肆资,位于F島的核電站瘫絮,受9級特大地震影響聋呢,放射性物質(zhì)發(fā)生泄漏梨睁。R本人自食惡果不足惜鳞陨,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一盛嘿、第九天 我趴在偏房一處隱蔽的房頂上張望洛巢。 院中可真熱鬧,春花似錦次兆、人聲如沸稿茉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渺蒿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茂装,已是汗流浹背良瞧。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工训唱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留褥蚯,地道東北人。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓况增,卻偏偏與公主長得像赞庶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子澳骤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,442評論 2 359

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

  • 因為要結(jié)局swift3.0中引用snapKit的問題,看到一篇介紹Xcode8,swift3變化的文章,覺得很詳細(xì)...
    uniapp閱讀 4,422評論 0 12
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫歧强、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,118評論 4 61
  • 前不久網(wǎng)上一直在流傳一個視頻为肮,我只看了開頭摊册,就沒再敢往下看。一個鮮活的生命流逝颊艳,肇事者逍遙法外茅特,他們都是年輕人,...
    茉妧閱讀 206評論 0 0
  • 問題: 數(shù)組方法里push棋枕、pop白修、shift、unshift重斑、join兵睛、split分別是什么作用? push用...
    愛上簾外修竹閱讀 391評論 0 0
  • 在光陰里,找個人真難窥浪! 結(jié)束是把開始的售出祖很! 這個世界,一不小心就會碰見或禽或獸 要比繡在帽子或衣服上動態(tài)萬千 用...
    王居明閱讀 325評論 2 3