しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swiftでobjc_getAssociatedObject/objc_setAssociatedObjectを使ってUIViewにプロパティー追加

objc_getAssociatedObject/objc_setAssociatedObjectを使ってUIViewにプロパティーを追加してみました。

追加は下のように行います。

var key = "key"

extension UIView {
    var prop: String {
        get {
            return objc_getAssociatedObject(
                self, &key) as? String ?? ""
        }
        set {
            objc_setAssociatedObject(
                self, &key, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)
        }
    }
}

うまくセットされました。

class ViewController: UIViewController {
    override func viewDidLoad() {
        print(view.prop) // → 空文字
        view.prop = "AAA"
        print(view.prop) // → AAA
    }
}

参考

Swiftで既存のクラスに新たにプロパティを追加する方法 - Qiita