LoginSignup
10
8

More than 5 years have passed since last update.

Swift4でUser Defined Runtime Attributesがうまく効かないところがあった

Last updated at Posted at 2017-10-19

問題

UIViewの枠線の色が変わらなくなった

Storyboardの User Defined Runtime Attributes でUIViewに枠線や、角丸、枠線の色を編集していたが、Swift4にあげてから枠線の色だけうまく反映されなくなった。

該当のStoryboardを見ると画像の通り。 layer.borderUIColor が反映されていない模様。

image.png

このプロパティは自分で以下のように実装していた。

import Foundation

extension CALayer {
    var borderUIColor: UIColor {
        get {
            return UIColor(cgColor: self.borderColor!)
        } set {
            self.borderColor = newValue.cgColor
        }
    }
}

これがSwift4から動かなくなっていた。Swift4になってからObjective-Cとの互換性が変わって User Defined Runtime Attributes が書き方によってはうまく読み込まれていなかったみたい。

解決方法

@objc dynamic をつけてあげる。

import Foundation

extension CALayer {
    @objc dynamic var borderUIColor: UIColor {
        get {
            return UIColor(cgColor: self.borderColor!)
        } set {
            self.borderColor = newValue.cgColor
        }
    }
}

とすればちゃんと動く。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8