【iOS 開發(fā)】初識函數式 Swift 實用

Swift 的語言特性使得它非常適合被用于以函數式編程思想,如果你還沒開始用函數式的方式來使用它,那么可以從現在開始刑赶,嘗試著利用函數式的便利性。

let indicateView = UIImageView(frame: view.frame)
indicateView.image = UIImage(named: "how2use")
self.view.addSubview(indicateView)

我剛剛寫了上面這段代碼懂衩,來讓我的當前頁面顯示名為 “how2use” 的這張圖片撞叨。看起來好像是我做了三件事:

  • 根據 frame 創(chuàng)建 UIImageView
  • 根據圖片名稱配置 UIImageView
  • 將 UIImageView 作為 subview 傳給其他 view

但是實際上浊洞,我只需要 frame牵敷、imageName 這兩個東西就可以把這三行代碼配置好,或者說我能不能用這兩個參數來把上面的三行代碼縮減為一行法希。

extension UIImageView {
    
    func frameSelf (rect:CGRect) -> UIImageView {
        self.frame = rect
        return self
    }
    
    func imageSelf (imageName:String) -> UIImageView {
        self.image = UIImage(named: imageName)
        return self
    }

    func placeSelf (view:UIView) -> UIImageView {
        view.addSubview(self)
        return self
    }
}

寫了上面這些方法之后劣领,代碼修改成這個樣子了:

let indicateView = UIImageView()
        .frameSelf(view.frame)
        .imageSelf("how2use")
        .placeSelf(self.view)

為了代碼可讀性,這里我寫了四行铁材,但顯然這是一行代碼。
繼而我發(fā)現 indicateView 這個名字沒有存在的必要奕锌,于是我廢棄掉 placeSelf 這個方法著觉,改成這樣:

self.view.addSubview(UIImageView()
    .frameSelf(view.frame)
    .imageSelf("how2use"))

一行代碼,不引入多余的變量惊暴。
如果你愿意的話饼丘,這個模式還可以繼續(xù)寫下去。

extension UIImageView {
    
    func tagSelf (tag:Int) -> UIImageView {
        self.tag = tag
        return self
    }
    
    func modeSelf(contentMode:UIViewContentMode) -> UIImageView {
        self.contentMode = contentMode
        return self
    }
}

最后代碼會變成這種形式:

NSObject().func1().func2().func3()......

思考

  1. 上面這些代碼的優(yōu)勢在于:類似 indicateView 這種東西辽话,用一次就不要了肄鸽,沒必要引入新的名稱,不便于理解和記憶油啤,我們就可以函數式地把它解決掉典徘,代碼更精簡易讀。
  2. 上面我用了 xxxxSelf 這種方式來表明益咬,這種方法不是用一下就完了逮诲,它會返回這個對象本身,所以你還可以繼續(xù)做別的事情幽告。但是這種命名方式我個人看來不夠好梅鹦,唯一好的地方可能只是在于:本來我想設置 imageView.tag = 100,結果敲出 tag 這三個字母冗锁,Xcode 就提示我有 tagSelf 這個方法可以用齐唆,這可以讓我方便地自動補全這個方法,不需要記憶方法名冻河。
  3. 這種編程方式的優(yōu)點之一在于不同方法之間的組合性箍邮,如果你想把上面這些方法整合到一個函數里茉帅,然后通過傳一大堆的參數來進行調用,是畫蛇添足媒殉。
  4. 顯然這種方式有其弊端担敌,不宜濫用,而且修改代碼的時候要注意:假如你要改動 func2廷蓉,注意它和 func1全封、func3 之間是不是存在什么先后關系。特別是你用這種方式來給圖片做濾鏡處理的時候桃犬,一張圖片先高斯模糊再打馬賽克刹悴,先打馬賽克再高斯模糊是完全不同的。
userImage.blur().mosaic() // 馬賽克本身是清晰的
userImage.mosaic().blur() // 馬賽克本身是模糊的


推薦一下個人博客:kyxu.tech

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末攒暇,一起剝皮案震驚了整個濱河市土匀,隨后出現的幾起案子,更是在濱河造成了極大的恐慌形用,老刑警劉巖就轧,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異田度,居然都是意外死亡妒御,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門镇饺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乎莉,“玉大人,你說我怎么就攤上這事奸笤⊥锟校” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵监右,是天一觀的道長边灭。 經常有香客問我,道長健盒,這世上最難降的妖魔是什么存筏? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮味榛,結果婚禮上椭坚,老公的妹妹穿的比我還像新娘。我一直安慰自己搏色,他們只是感情好善茎,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著频轿,像睡著了一般垂涯。 火紅的嫁衣襯著肌膚如雪烁焙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天耕赘,我揣著相機與錄音骄蝇,去河邊找鬼。 笑死操骡,一個胖子當著我的面吹牛九火,可吹牛的內容都是我干的。 我是一名探鬼主播册招,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼岔激,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了是掰?” 一聲冷哼從身側響起虑鼎,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎键痛,沒想到半個月后炫彩,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡絮短,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年媒楼,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戚丸。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扔嵌,靈堂內的尸體忽然破棺而出限府,到底是詐尸還是另有隱情,我是刑警寧澤痢缎,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布胁勺,位于F島的核電站,受9級特大地震影響独旷,放射性物質發(fā)生泄漏署穗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一嵌洼、第九天 我趴在偏房一處隱蔽的房頂上張望案疲。 院中可真熱鬧,春花似錦麻养、人聲如沸褐啡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽备畦。三九已至低飒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間懂盐,已是汗流浹背褥赊。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莉恼,地道東北人拌喉。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像类垫,于是被迫代替她去往敵國和親司光。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,149評論 25 707
  • 一晃二十年過去了悉患,你也在我的心里整整封存了二十年残家。說不出是一種什么樣的感情,說忘不了也罷售躁,說懷念也罷坞淮,確實你就那么...
    晚秋_閱讀 487評論 0 0
  • 今日分享:廣角鏡頭怎么拍出長腿照,有幾個要點:1.豎屏拍攝陪捷;2.拍攝者將相機放在腹部為最佳回窘;3.將人物放置在畫面的...
    Scorpio侯儷閱讀 298評論 0 2
  • 讀的什么書:《把時間當作朋友》 閱讀有效時間:40分鐘 閱讀中遇到了什么困難:讀過的書很快就忘記了 閱讀有什么收獲...
    心語花說閱讀 259評論 0 0
  • 怡口蓮糖的吃法,含在嘴里市袖,咬破啡直,千萬不要亂嚼,讓它的夾心的汁液流在舌頭上苍碟,這樣很好吃酒觅,然后再隨心所欲的吃吧。兒時喜...
    蒲公英花開閱讀 228評論 0 1