Background:
經(jīng)常出現(xiàn)看過的東西算灸,當(dāng)時驚嘆+覺得很棒
但回頭就忘,或者即時記著锣笨,但也沒有深刻印象蝌矛,不會主動想著運用到當(dāng)前的項目中來。 但是哪一天突然遇到個場景错英,發(fā)現(xiàn)可以用了入撒,但具體細(xì)節(jié)一時半會想不起來,而且常常是這會又找不到當(dāng)初是從哪里看的了...??
于是決定每次寫blog記錄下來椭岩,目的在于:
1.加深點印象
2.回頭需要的時候找起來也方便點
Source:
Time:
2016-06-08
Main body:
1. Swift:Selector 語法糖
本文鏈接:http://swift.gg/2016/06/02...
原文鏈接:https://medium.com/swift-programming/...
作者:Andyy Hope茅逮,原文日期:2016-03-23
- 1.1 swift比較新,所以編碼風(fēng)格"百家爭鳴"判哥,這里建議了一種比較不錯的selector命名的方法:
對象名作為前綴献雅,動作作為后綴
func segmentedControlValueChanged(sender: UISegmentedControl) { }
func barButtonItemTapped(sender: UIBarButtonItem) { }
func keyboardWillShowNotification(notification: NSNotification) { }
- 1.2 很多地方調(diào)用方法的時候,"又臭又長"塌计,例如:
button.addTarget(self, action: #selector(ViewController.buttonTapped(_:)), forControlEvents: .TouchUpInside)
比較"優(yōu)美"的方式是惩琉,使用結(jié)構(gòu)體,同時夺荒,基于swift的"類型推斷特性"瞒渠,可以寫成這樣:
private extension Selector {
static let buttonTapped =
#selector(ViewController.buttonTapped(_:))
}
...
button.addTarget(self, action: .buttonTapped,
forControlEvents: .TouchUpInside)
2. 用 Swift 編寫面向協(xié)議的視圖
本文鏈接: http://swift.gg/2016/06/01/...
原文鏈接: https://www.natashatherobot.com/...
作者:Natasha The Robot,原文日期:2016-05-13
這個又是一片主推面向協(xié)議編程的文章.
文章以一篇“ImageView 增加shake效果”為例技扼,對比“繼承父類”的模式和“面向協(xié)議”的模式:
- 繼承父類的方法就不多說了伍玖,統(tǒng)一在UIView的Category中增加個shake方法,UIImageview剿吻,UIButton直接調(diào)用即可.
- 面向?qū)ο蟮姆椒ㄇ瞎浚瑂how me the code:
定義:
// Shakeable.swift
import UIKit
protocol Shakeable { }
// 你可以只為 UIView 添加 shake 方法!
extension Shakeable where Self: UIView {
// shake 方法的默認(rèn)實現(xiàn)
func shake() {
let animation = CABasicAnimation(keyPath: "position")
animation.duration = 0.05
animation.repeatCount = 5
animation.autoreverses = true
animation.fromValue = NSValue(CGPoint: CGPointMake(self.center.x - 4.0, self.center.y))
animation.toValue = NSValue(CGPoint: CGPointMake(self.center.x + 4.0, self.center.y))
layer.addAnimation(animation, forKey: "position")
}
}
實現(xiàn):
class FoodImageView: UIImageView, Shakeable {
// 其他自定義寫在這兒
}
class ActionButton: UIButton, Shakeable {
// 其他自定義寫在這兒
}
class ViewController: UIViewController {
@IBOutlet weak var foodImageView: FoodImageView!
@IBOutlet weak var actionButton: ActionButton!
@IBAction func onShakeButtonTap(sender: AnyObject) {
foodImageView.shake()
actionButton.shake()
}
}
polen:
至于這種方法的好壞丽旅,還是需要自己根據(jù)實際情況進(jìn)行選擇.使用Category的劣勢是如果我們的需求越來越多椰棘,Category會越來越龐大,以致于回頭都搞不清具體哪個方法是從哪里來榄笙,從哪里去的.用協(xié)議的方法邪狞,會讓代碼更清晰一些,但是代碼量比較大茅撞,維護(hù)起來也復(fù)雜很多...
其實一個東西帆卓,真正該用什么方法巨朦,想幾個極端:假設(shè)最復(fù)雜的情況,假設(shè)我們有非常多的類剑令,非常多的需求糊啡,非常多的結(jié)構(gòu),在那種情況下吁津,怎么樣效果最好棚蓄,按照這個思路去思考,可能更清晰一些...(因為這樣碍脏,會把缺點放大梭依,放大...)