Swift 4新功能-4

八舷手、泛型下標(biāo)

下標(biāo)現(xiàn)在可以有泛型參數(shù)和返回類型.
最權(quán)威的例子莫過于表示 JSON 數(shù)據(jù): 你可以定義一個(gè)泛型下標(biāo)來保持調(diào)用者期望類型的內(nèi)容.

struct JSON {
    fileprivate var storage: [String:Any]

    init(dictionary: [String:Any]) {
        self.storage = dictionary
    }

    subscript<T>(key: String) -> T? {
        return storage[key] as? T
    }
}

let json = JSON(dictionary: [
    "城市名": "北京",
    "國(guó)家代碼": "cn",
    "人口": 21_710_000
    ])

// 沒必要用 as? Int
let population: Int? = json["人口"]

另一個(gè)例子: Collection 的一個(gè)下標(biāo)接受一個(gè)泛型索引序列, 并返回一個(gè)這些索引所在的數(shù)組:

extension Collection {
    subscript<Indices: Sequence>(indices: Indices) -> [Element] where Indices.Element == Index {
        var result: [Element] = []
        for index in indices {
            result.append(self[index])
        }
        return result
    }
}

let words = "我 思 故 我 在".split(separator: " ")
words[[1,2]]

九厦凤、NSNumber 橋接

修正部分危險(xiǎn)行為當(dāng)橋接Swift原生數(shù)字類型和NSNumber的時(shí)候.

import Foundation

let n = NSNumber(value: UInt32(301))
let v = n as? Int8 // nil(Swift 4). Swift 3會(huì)是45 (試試看!).

十萧恕、類和協(xié)議的組合

你現(xiàn)在能寫出OC這段 UIViewController <SomeProtocol> * 在Swift中的等價(jià)代碼, 比如聲明這樣一個(gè)變量,這個(gè)變量擁有實(shí)體類型并同時(shí)遵守若干協(xié)議. 語(yǔ)法 let 變量: 某個(gè)類 & 協(xié)議1 & 協(xié)議2.

import Cocoa

protocol HeaderView {}

class ViewController: NSViewController {
    let header: NSView & HeaderView

    init(header: NSView & HeaderView) {
        self.header = header
        super.init(nibName: nil, bundle: nil)
    }

    required init(coder decoder: NSCoder) {
        fatalError("not implemented")
    }
}

// 不能傳一個(gè)簡(jiǎn)單的NSView進(jìn)去因?yàn)椴蛔袷貐f(xié)議
//ViewController(header: NSView())
// 錯(cuò)誤: argument type 'NSView' does not conform to     expected type 'NSView & HeaderView'

// 必須穿一個(gè) NSView (子類) 同時(shí)遵守協(xié)議
extension NSImageView: HeaderView {}

ViewController(header: NSImageView()) // 有用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市暴匠,隨后出現(xiàn)的幾起案子涩蜘,更是在濱河造成了極大的恐慌券坞,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桃熄,死亡現(xiàn)場(chǎng)離奇詭異先口,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瞳收,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門碉京,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人螟深,你說我怎么就攤上這事谐宙。” “怎么了界弧?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵凡蜻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我垢箕,道長(zhǎng)划栓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任条获,我火速辦了婚禮忠荞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己委煤,他們只是感情好堂油,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碧绞,像睡著了一般称诗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上头遭,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天寓免,我揣著相機(jī)與錄音,去河邊找鬼计维。 笑死袜香,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲫惶。 我是一名探鬼主播蜈首,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼欠母!你這毒婦竟也來了欢策?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤赏淌,失蹤者是張志新(化名)和其女友劉穎踩寇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體六水,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俺孙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掷贾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睛榄。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖想帅,靈堂內(nèi)的尸體忽然破棺而出场靴,到底是詐尸還是另有隱情,我是刑警寧澤港准,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布旨剥,位于F島的核電站,受9級(jí)特大地震影響叉趣,放射性物質(zhì)發(fā)生泄漏泞边。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一疗杉、第九天 我趴在偏房一處隱蔽的房頂上張望阵谚。 院中可真熱鬧蚕礼,春花似錦、人聲如沸梢什。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嗡午。三九已至囤躁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荔睹,已是汗流浹背狸演。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留僻他,地道東北人坏瞄。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓物舒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親低淡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子父腕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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

  • 136.泛型 泛型代碼讓你可以寫出靈活,可重用的函數(shù)和類型,它們可以使用任何類型,受你定義的需求的約束带兜。你可以寫出...
    無灃閱讀 1,472評(píng)論 0 4
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,814評(píng)論 1 10
  • 2016年10月12日 Objective-C id為Swift Any Swift 3接口與Objective-...
    魔靈FH閱讀 2,861評(píng)論 0 19
  • 53.計(jì)算字符 在字符串中獲取字符值的數(shù)量, 可以使用字符串字符屬性中的計(jì)數(shù)屬性: let unusualMena...
    無灃閱讀 1,091評(píng)論 0 4
  • 朝歌降颠焦,云霧邪通今。幾經(jīng)風(fēng)雨,雨上榆煙翠娇妓。離箏秦音南望北像鸡,古道多香,輾轉(zhuǎn)幾折回峡蟋。 蘇煙起坟桅,故舊常华望。頻頻幾見蕊蝗,醉久夜望香...
    李高翰閱讀 343評(píng)論 0 0