Xcode 9 borderColor 在用户定义的运行时属性中不起作用

Xcode 9 borderColor doesn't work in User Defined Runtime Attributes

我正在使用这个 CALayer 扩展程序:

var borderUIColor: UIColor {
    set {
        self.borderColor = newValue.cgColor
    }

    get {
        return UIColor(cgColor: self.borderColor!)
    }
}

我想也许是因为这个扩展,我的 borderColor 页面底部的提交按钮没有变成白色(正如我希望的那样):

但是不,我连接了一个 IBOutlet 并尝试像这样直接设置颜色:

submitButton.layer.borderColor = UIColor.white.cgColor

viewDidLoadviewWillAppearviewDidAppear 中做了,因为我知道在上次大更新 (iOS 10) 中,帧渲染发生了根本性的变化( 1000x1000 帧的东西),也许现在有一些类似的改动。不过运气不好。

我在 iOS 9、10 和 11 中进行了测试。这与 OS 无关,而是与环境有关。我正在使用 Xcode 9 Beta 5。有什么解决办法吗?

清除了项目,删除了派生数据,代码现在可以在 viewDidLoadviewWillAppearviewDidAppear 中运行。

问题显然与 用户定义的运行时属性 有关。 Xcode 9 不再接受这里的扩展变量。或者,至少是 Beta 5 版本。

编辑:确实,添加 @objc 解决了问题。

尝试用 @objc 修饰您的 var 声明,如下所示:

@objc var borderUIColor: UIColor {
...
}

应该可以解决您的问题

刚遇到同样的问题,得到了另一个解决方案:我刚刚让我的 class KVC 兼容。

示例,逐步:

  • 自定义 class 是 XTCMenuItem,具有 属性 propIdentifier。
  • 为了符合 KVC,这个 class 得到了两个方法:
    • 覆盖函数值(forKey 键:字符串)-> 任何?
    • 重写 func setValue(_ value: 有吗?,forKey key: String)
  • 在 Identity Inspector 中,我设置了自定义 class 到 "XTCMenuItem",并添加用户定义的运行时属性 "propIdentifier" 类型 "String" 和一个字符串值。

使用@IBInspectable 属性。 示例:

@IBInspectable var borderColor = UIColor.green

如果您不想创建 IBOutlet 而只是使用运行时属性,那么您可以使用 IBDesignable 并设置前缀 @objc 它会解决您的问题。

@objc @IBInspectable var borderColor: UIColor {

   get {
      return UIColor(cgColor: self.layer.borderColor!)
   }
   set {
      self.layer.borderColor = newValue.cgColor
   }
}