我警告我无法删除
通过此函数的所有路径都将自行调用
我的代码:
extension UIView {
var isLowAlpha: Bool {
get {
return self.isLowAlpha
}
set {
self.isUserInteractionEnabled = !newValue
self.alpha = newValue ? 0.3 : 1
}
}
}
我无法使用此方法修改代码,因为我遇到了错误extension must not contain stored property ..
:
extension UIView {
var isLowAlpha: Bool {
didSet {
self.isUserInteractionEnabled = !isLowAlpha
self.alpha = isLowAlpha ? 0.3 : 1
}
}
}
解决方案是什么?
答案 0 :(得分:0)
一种可能的解决方案是还原该过程:
var isLowAlpha: Bool {
get {
return !isUserInteractionEnabled
}
set {
isUserInteractionEnabled = !newValue
alpha = newValue ? 0.3 : 1
}
}
或者更好,因为您对getter
不感兴趣,因此使其成为函数:
func setIsLowAlpha(_ lowAlpha: Bool) {
self.isUserInteractionEnabled = !lowAlpha
self.lowAlpha = newValue ? 0.3 : 1
}
无论如何,查看您的代码,您可能希望实现视图被禁用。这通常是UIControl
子类的任务,而不是UIView
的任务。
还请注意,可以使用包装器视图实现相同的操作:
class AlphaView: UIView {
var isLowAlpha: Bool = false {
didSet {
isUserInteractionEnabled = !isLowAlpha
alpha = isLowAlpha ? 0.3 : 1
}
}
}
然后将您的意见放在里面。
答案 1 :(得分:0)
在第一种情况下,您递归地调用了变量的getter,因此它将永远不会返回。解决此问题的方法是使用存储的属性_isLowAlpha
,但是不幸的是,正如第二个错误所提到的,Swift扩展不能包含存储的变量。它们只能包含计算的属性。如果确实需要添加其他属性,则需要代替UIView
的子类,而不是进行扩展。
但是,在这种情况下,只要您不通过直接使用alpha属性在其他地方设置UIView的alpha属性,就可以作弊:
extension UIView {
var isLowAlpha: Bool {
get {
return self.alpha == 0.3;
}
set {
self.alpha = newValue ? 0.3: 1
self.isUserInteractionEnabled = !newValue
}
}
}