iOS
Инициализация идиом
Поиск…
Установите кортежи во избежание повторения кода
Избегайте повторения кода в конструкторах, устанавливая кортеж переменных с одним слоем:
class Contact: UIView
{
private var message: UILabel
private var phone: UITextView
required init?(coder aDecoder: NSCoder) {
(message, phone) = self.dynamicType.setUp()
super.init(coder: aDecoder)
}
override func awakeFromNib() {
(message, phone) = self.dynamicType.setUp()
super.awakeFromNib()
}
override init(frame: CGRect) {
(message, phone) = self.dynamicType.setUp()
super.init(frame: frame)
}
private static func setUp(){
let message = UILabel() // ...
let phone = UITextView() // ...
return (message, phone)
}
}
Инициализировать с помощью позиционных констант
let mySwitch: UISwitch = {
view.addSubview($0)
$0.addTarget(self, action: "action", forControlEvents: .TouchUpInside)
return $0
}(UISwitch())
Инициализировать атрибуты в didSet
@IBOutlet weak var title: UILabel! {
didSet {
label.textColor = UIColor.redColor()
label.font = UIFont.systemFontOfSize(20)
label.backgroundColor = UIColor.blueColor()
}
}
Также возможно установить значение и инициализировать его:
private var loginButton = UIButton() {
didSet(oldValue) {
loginButton.addTarget(self, action: #selector(LoginController.didClickLogin), forControlEvents: .TouchUpInside)
}
}
Групповые выходы в пользовательском NSObject
Переместите каждую розетку в NSObject. Затем перетащите объект из библиотеки в сцену контроллера раскадровки и закрепите там элементы.
class ContactFormStyle: NSObject
{
@IBOutlet private weak var message: UILabel! {
didSet {
message.font = UIFont.systemFontOfSize(12)
message.textColor = UIColor.blackColor()
}
}
}
class ContactFormVC: UIViewController
{
@IBOutlet private var style: ContactFormStyle!
}
Инициализируйте с помощью
Это похоже на синтаксис примера, который инициализирует использование позиционных констант, но требует расширения Then
от https://github.com/devxoul/Then (прилагается ниже).
let label = UILabel().then {
$0.textAlignment = .Center
$0.textColor = UIColor.blackColor(
$0.text = "Hello, World!"
}
Расширение Then
:
import Foundation
public protocol Then {}
extension Then
{
public func then(@noescape block: inout Self -> Void) -> Self {
var copy = self
block(©)
return copy
}
}
extension NSObject: Then {}
Фабричный метод с блоком
internal func Init<Type>(value : Type, block: @noescape (object: Type) -> Void) -> Type
{
block(object: value)
return value
}
Использование:
Init(UILabel(frame: CGRect.zero)) {
$0.backgroundColor = UIColor.blackColor()
}
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow