Swiftで型推論を使っていきたい
省略について
Swiftには型名.varibaleHoge
と書くところを型がわかっている場合は.varibaleHoge
と書ける。
例えば以下のような感じ。
// textAlignmentはNSTextAlignment(enum)で、centerが定義されている UILabel().textAlignment = .center // centerはCGPointで、zeroがstatic varで定義されている UILabel().center = .zero
型推論を使えるようにする
上の例ではenum
やstatic var
で既に定義してあるものを省略して書いている。これを自分たちで定義することで便利に呼び出すことが出来る。
例えばアプリで使う色が決まっている場合は以下のようにできる。
// MARK: - App color scheme extension UIColor { /// #FFFA89 static let yellowBackground = #colorLiteral(red: 1, green: 0.9803921569, blue: 0.537254902, alpha: 1) /// #A66BFF static let purpleButton = #colorLiteral(red: 0.6509803922, green: 0.4196078431, blue: 1, alpha: 1) /// #FF1A1B static let redError = #colorLiteral(red: 1, green: 0.1019607843, blue: 0.1058823529, alpha: 1) } // static letで定義したので省略して書ける // また直接カラーリテラルを代入するのと違い、変数名で色の役割がわかる UILabel().backgroundColor = .yellowBackground UILabel().textColor = .redError
また自分が先日使えると思ったのを書いてみる。NotificationCenterで独自に通知名を指定し、処理する例である。通常であれば下のように書くと思う。.init("appHogeEvent")
で独自の通知名を指定しているが、"appHogeEvent"
でタイポしてしまうと処理されなくなってしまう。
NotificationCenter.default.post(name: .init("appHogeEvent"), object: nil)
これをenum
とstatic let
を使うことで以下のように書ける。
enum AppNotificationName: String { case hogeEvent } // MARK: - App custom notification extension Notification.Name { // AppNotificationNameを使ってイニシャライズできるようにする init(appNotificationName: AppNotificationName) { self.init(appNotificationName.rawValue) } static let appHogeEvent = Notification.Name(appNotificationName: .hogeEvent) } // static letで定義したappHogeEventを型推論を書く NotificationCenter.default.post(name: .appHogeEvent, object: nil)
まとめ
自分でextension
を使って拡張することで便利に型推論を使うことが出来る。タイプ数を減らすだけでなく、変数名で役割を明確にしタイポも減らすことが出来るので使っていきたいという話。