gpt4 book ai didi

swift - 无法在 UIView 中设置@IBInspectable 计算属性

转载 作者:可可西里 更新时间:2023-11-01 00:35:50 30 4
gpt4 key购买 nike

我正在尝试向 UIView 添加 IBInspectable 颜色,以便我可以在 Storyboard中设置它,然后在代码中使用它。在 this post regarding UITextField我已经看到我可以利用扩展和添加计算属性,但我不能让它适用于 UIView。

Identity inspector enter image description here

我遇到了一个崩溃:无法在 (UIView) 上设置 (additionalColor1) 用户定义的检查属性:[setValue:forUndefinedKey:]:此类对于键 additionalColor1 不符合键值编码。

知道是什么导致了崩溃以及如何修复它吗?

这是我的代码:

extension UIView {
@IBInspectable var additionalColor1: UIColor? {
return self.additionalColor1
}
}

作为引用,我粘贴了可用于为 UITextField 设置占位符颜色的代码(与上述网址相同)。这工作正常:

extension UITextField {
@IBInspectable var placeHolderColor: UIColor? {
get {
return self.placeHolderColor
}
set {
self.attributedPlaceholder = NSAttributedString(string: self.placeholder != nil ? self.placeholder! : "", attributes:[NSForegroundColorAttributeName: newValue!])
}
}
}

最佳答案

如您的问题标题所述

Swift extensions can only add computed properties to a type, but they cannot add stored properties.

(有关更多详细信息,请参阅 Extension 中的 The Swift Programming Language 章节。)

您发布的示例实际上是有缺陷的 — 即使此时它在 Stackoverflow 上有 50 个赞成票。如果您从属性的 getter 返回属性本身的值,那么您正在创建一个循环。

@IBInspectable var additionalColor1: UIColor? {
return self.additionalColor1
}

如果您有一个 View ,并且您尝试在代码中的任何位置访问view.additionalColor1,您的属性的getter 将被调用,返回self.additionalColor1——或者换句话说:它再次返回属性的值——你猜怎么着?通过调用属性的 setter/getter ! (等等……)

您提到的帖子中的示例仅“有效”,因为 setter/getter 显然从未被调用过。只有 设置 计算属性 placeHolderColor 会更改另一个存储的属性,即文本字段的 attributedPlaceholder

因此,虽然您可以通过扩展将计算 属性添加到现有类中,但您永远都不能将其视为存储在某处的具体值。计算属性只能用于以某种方式转换您分配给它的值并将结果存储在现有存储属性中。

关于swift - 无法在 UIView 中设置@IBInspectable 计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42334264/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com