Last active
October 21, 2017 07:23
-
-
Save ktanaka117/7b4297df110d3e40722100badca9a0ae to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
public struct UILabelMaker { | |
let label: UILabel | |
} | |
extension UILabelMaker { | |
public func set(textColor color: UIColor) -> UILabelMaker { | |
self.label.textColor = color | |
return self | |
} | |
public func set(numberOfLines number: Int) -> UILabelMaker { | |
self.label.numberOfLines = number | |
return self | |
} | |
// public func set(_ alignment: NSTextAlignment) -> UILabelMaker { | |
// self.label.textAlignment = alignment | |
// return self | |
// } | |
public func set(textAlignment alignment: NSTextAlignment) -> UILabelMaker { | |
self.label.textAlignment = alignment | |
return self | |
} | |
// public func set(_ mode: NSLineBreakMode) -> UILabelMaker { | |
// self.label.lineBreakMode = mode | |
// return self | |
// } | |
public func set(lineBreakMode mode: NSLineBreakMode) -> UILabelMaker { | |
self.label.lineBreakMode = mode | |
return self | |
} | |
// public func set(_ font: UIFont) -> UILabelMaker { | |
// self.label.font = font | |
// return self | |
// } | |
public func set(font: UIFont) -> UILabelMaker { | |
self.label.font = font | |
return self | |
} | |
} | |
extension UILabel { | |
// 関数名は init() ではなく make() のままで良いと思った | |
// ・バッククォートを使うのは非推奨ってのをじっちゃに聞いた | |
// ・既存のinitとは違う実装をしていて、Builderを使っているという意図を残すため | |
// public static func `init`(frame: CGRect = .zero, by making: (UILabelMaker) -> UILabelMaker) -> UILabel {} | |
public static func make(withFrame frame: CGRect = .zero, by making: (UILabelMaker) -> UILabelMaker) -> UILabel { | |
let label = UILabel(frame: frame) | |
let maker = UILabelMaker(label: label) | |
let resultMaker = making(maker) | |
let resultLabel = resultMaker.label | |
return resultLabel | |
} | |
} | |
let label = UILabel.make { $0 | |
.set(textColor: .red) | |
.set(numberOfLines: 0) | |
// ・NSTextAlignment, NSLineBreakModeについては型情報で意味がわかるから引数名を省略していいと思ったけど、パッと見たときに .center, .byWordWrapping だけだと何を設定しているのかわからなかったので、 | |
// 引数名をやっぱりつけた。 | |
// ・UIFontに関してはよく使うし、馴染みがあって、fontとかのキーワードがcase名についてるから、引数名を省略しても後で読んだときに違和感を感じないと思ったけど、 | |
// 上に書いたNSTextAlignmentとかとインターフェースの名付けルールに揃えるために引数名をつけた | |
// .set(.center) | |
.set(textAlignment: .center) | |
// .set(.byWordWrapping) | |
.set(lineBreakMode: .byWordWrapping) | |
// .set(.systemFont(ofSize: 20)) | |
.set(font: .systemFont(ofSize: 20)) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment