サーチ…


コードの繰り返しを避けるためにタプルに設定する

1組の変数で1組の変数を設定することによって、コンストラクタでコードの繰り返しを避ける:

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!
}

その後で初期化する

これは、位置定数を使用して初期化する例と構文が似ていますが、 https://github.com/devxoul/Then (以下に添付)の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(&copy)
        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