Swift 定義命名空間

使用過(guò)第三方 KingFisher的小伙伴, 肯定使用過(guò) ImageView.kf 吧,這個(gè)是怎么實(shí)現(xiàn)的呢硝烂? 為啥要這么做呢?

雖然 Swift 不像OC那樣躯舔, 只有一個(gè)命名空間, Swift 一個(gè) module 就代表一個(gè)命名空間省古。

既然是引入的第三方庫(kù)粥庄, 本來(lái)就是一個(gè)module, 其實(shí)不需要添加 kf 這樣的關(guān)鍵字豺妓, 也不會(huì)和項(xiàng)目中的類(lèi)或者方法名等造成命名沖突惜互, 但是為了使用上引起不必要的理解沖突, 我們定義這樣的命名空間琳拭, 使得代碼的可讀性增強(qiáng)训堆。

定義命名空間, 需要做的有以下操作

  • 定義一個(gè)泛型類(lèi)
public struct YongHandel<Base> {
    public var base: Base

    public init(_ base: Base) {
        self.base = base
    }
}

其中 YongHandel 可以指定為 module 的名稱(chēng)白嘁, 還有一個(gè)存儲(chǔ)屬性蔫慧, 一個(gè)初始化方法;

  • 定義一個(gè) 泛型協(xié)議
public protocol YongHandelCompatible {
    associatedtype CompatibleType
    
    static var yh: CompatibleType.Type { get }
    var yh: CompatibleType { get }
}

其中 定義關(guān)聯(lián)類(lèi)型 CompatibleType权薯, 一個(gè)只讀類(lèi)計(jì)算屬性 yh, 一個(gè)只讀的實(shí)例計(jì)算屬性 yh睡扬;

  • 定義協(xié)議的默認(rèn)擴(kuò)展屬性
extension YongHandelCompatible {
    public static var yh: YongHandel<Self>.Type {
        return YongHandel.self
    }
    
    public var yh: YongHandel<Self> {
        return YongHandel(self)
    }
}

其中類(lèi)計(jì)算屬性盟蚣, 返回類(lèi)本身, 實(shí)例計(jì)算屬性卖怜, 返回類(lèi)的實(shí)例屎开;

至此我們的命名空間定義完成

如何去使用呢?

  • 給 UIcolor 添加命名空間

定義:

extension UIColor: YongHandelCompatible { }

extension YongHandel where Base == UIColor {
    
    public static var themeColor: UIColor {
        return UIColor.red
    }
    
    public var backColor: UIColor {
        return UIColor.purple
    }
}

使用:

view.backgroundColor = UIColor.yh.themeColor
  • 給 String 添加命名空間
extension String: YongHandelCompatible { }

extension YongHandel where Base == String {
    
    public static var toolTip: String {
        return "hello world"
    }
    
    public var message: String {
        return "真好用"
    }
}

使用

let str = String.yh.toolTip

參考 KingFisher

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末马靠,一起剝皮案震驚了整個(gè)濱河市奄抽,隨后出現(xiàn)的幾起案子蔼两,更是在濱河造成了極大的恐慌,老刑警劉巖逞度,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件额划,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡档泽,警方通過(guò)查閱死者的電腦和手機(jī)俊戳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)馆匿,“玉大人抑胎,你說(shuō)我怎么就攤上這事〗ケ保” “怎么了阿逃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)赃蛛。 經(jīng)常有香客問(wèn)我恃锉,道長(zhǎng),這世上最難降的妖魔是什么焊虏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任淡喜,我火速辦了婚禮,結(jié)果婚禮上诵闭,老公的妹妹穿的比我還像新娘炼团。我一直安慰自己,他們只是感情好疏尿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布瘟芝。 她就那樣靜靜地躺著,像睡著了一般褥琐。 火紅的嫁衣襯著肌膚如雪锌俱。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天敌呈,我揣著相機(jī)與錄音贸宏,去河邊找鬼。 笑死磕洪,一個(gè)胖子當(dāng)著我的面吹牛吭练,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播析显,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鲫咽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起分尸,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锦聊,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后箩绍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體孔庭,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年伶选,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了史飞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仰税,死狀恐怖构资,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陨簇,我是刑警寧澤吐绵,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站河绽,受9級(jí)特大地震影響己单,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耙饰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一纹笼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苟跪,春花似錦廷痘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至篷扩,卻和暖如春兄猩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鉴未。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工枢冤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铜秆。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓淹真,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親羽峰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫(xiě)文章梅屉,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 2,739評(píng)論 2 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,092評(píng)論 1 32
  • 結(jié)婚對(duì)當(dāng)事人和他們的父母親來(lái)說(shuō)是一樁喜事值纱,然而對(duì)于和他們父母同輩的寄禮者來(lái)說(shuō)則是一件令人喪氣的事。 六七十歲的老年...
    thinkdifferentl閱讀 663評(píng)論 0 0
  • 今天中午坯汤,遲了幾分鐘與磊姐姐相約個(gè)談虐唠,原因是兩歲的小寶最近特別粘我,放下就會(huì)哇哇大哭惰聂,看著她眼淚汪汪的模樣疆偿,...
    鏸語(yǔ)閱讀 194評(píng)論 0 2
  • 近幾日,甚覺(jué)腹中空空如也搓幌。遂不敢提筆為文杆故,為依葫蘆個(gè)畫(huà)瓢解解苦悶。望方家拍磚示驚為盼溉愁。
    龍鈞吟閱讀 261評(píng)論 2 5