在用Swift语言将值指定给属性之前,我们如何验证和调整该值?
在Java中,为了确保为属性分配有效的值,我们可以将属性设置为私有,但有一个setter方法来接收和定制值。但是,在Swift中执行相同操作的最佳实践是什么在用Swift语言将值指定给属性之前,我们如何验证和调整该值?,swift,Swift,在Java中,为了确保为属性分配有效的值,我们可以将属性设置为私有,但有一个setter方法来接收和定制值。但是,在Swift中执行相同操作的最佳实践是什么 存储属性的getter和setter方法似乎会传播警告消息。根据您希望对setter/getter的逻辑进行何种控制,至少有两种方法 普通的快速接球手和接球手对。您需要记住的是,如果您提供自定义getter/setter,那么Swift将不会为您合成存储的属性。相反,您必须创建一个自己的、独立于公共var: class-MyClass{ 私
存储属性的getter和setter方法似乎会传播警告消息。根据您希望对setter/getter的逻辑进行何种控制,至少有两种方法
var
:class-MyClass{
私有var\u myProperty:Int
公共变量myProperty:Int{
设置{
//newValue是一个隐式变量
/考虑它好像你有一些类似SEMyFipe(int NealValm){}
//记住newValue是不可变的,所以
//无法直接修改它,但可以为其分配其他内容
//_myProperty
self.\u myProperty=newValue
}
得到{
返回self.\u myProperty
}
}
}
比如:
var myProperty:Int{
设置{
self.myProperty=newValue
}
得到{
返回self.myProperty
}
}
不工作,因为self.myProperty=…
将调用myProperty
的setter并返回self。myProperty
将调用myProperty
的getter。这是一个无限递归调用。Java的等价物是:
公共类MyClass{
私有财产;
公共void setMyProperty(int newValue){
此.setMyProperty(newValue);
}
public int getMyProperty(){
返回此.getMyProperty();
}
}
我知道Swift自动调用getter/setter而不是访问存储属性的内存有点扭曲,但它就是这样工作的
请注意,您必须为上面的\u myProperty
提供一些默认值,可以在init
中,也可以直接在声明属性的地方提供(但这超出了答案的范围,我提到它只是为了让您知道,如果没有细微的更改,上述代码将无法编译)
newValue
与最小值和最大值进行比较:@propertyWrapper
结构夹紧{
var值:value
让范围:ClosedRange
init(wrappedValue值:value,uu范围:ClosedRange){
前提条件(范围.包含(值))
自我价值=价值
self.range=范围
}
var wrappedValue:Value{
获取{value}
设置{value=max(range.lowerBound,min(newValue,range.upperBound))}
}
}
用法:
class-MyClass{
@钳位(0…10)var myProperty:Int=5
}
这将确保
myProperty
介于0和10之间。属性包装器有很多用法(另一个例子是原子访问属性),它们只是一些应用于某些属性的“共享getter/setter”函数。这只是一些语法上的糖分,可以避免你一次又一次地重复写同样的逻辑。你说的警告消息是什么意思通过此函数的所有路径都将调用自身
是您收到的消息类型吗?这正是我想要的解决方案。这种设计使得快速值验证有点麻烦。