Tra*_*lly 13 variables getter setter swift
使用swift 4.2我已经开始看到很多问题,其中一个我不确定如何解决,因为我的getter方法应该返回值本身.
我想现在发生的事情是getter将在调用self.type时尝试访问getter
我该如何解决这个问题?
以下是带错误的代码的屏幕截图.
提前致谢
这是书面代码
@objc var type: DecisionType {
set {
if(newValue == DecisionType.DecisionDouble){
//Yes button and NO button should be showing
okButton.isHidden = true;
yesButton.isHidden = false;
noButton.isHidden = false;
}
else {
//Only Ok button should be showing
okButton.isHidden = false;
yesButton.isHidden = true;
noButton.isHidden = true;
}
}
get {
return self.type;
}
};
Run Code Online (Sandbox Code Playgroud)
Ale*_*ica 16
您的问题是type
getter 没有存储的属性可以返回.type
是计算属性.当您尝试读取其值时,它会调用您定义的getter.这个getter调用getter,getter又调用getter来调用getter ......依此类推.你有无限的递归.
最有可能的是,你打算做的是拥有一个存储的属性,只要它的集合有一些奇特的行为.而不是使用带有自定义的计算属性,get
并set
使用带有willSet
或didSet
块的存储属性:
@objc var type: DecisionType {
didSet {
let isDecisionDouble = newValue == DecisionType.DecisionDouble
okButton.isHidden = isDecisionDouble;
yesButton.isHidden = !isDecisionDouble;
noButton.isHidden = !isDecisionDouble;
}
}
Run Code Online (Sandbox Code Playgroud)
对于这种情况,如果有一个额外的属性,您将使用它作为 getter 的返回值,并在主要属性更改时设置它,这是一种更好的方法。例如,假设您使用的主要属性是type
一个额外的属性,_type
请注意旁边的下划线。那么这里是你将如何设置和检索你的和设置你的主要属性type
// This is a an extra property which you will use internally
private var _type: DecisionType?
// Then use it as shown below
var type:DecisionType? {
get {
return _type
}
set {
_type = newValue
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15601 次 |
最近记录: |