在 Swift 中创建边界 Setter
Creating Setter with boundaries in Swift
在 class 中,我使用了一个变量,例如百分比,我希望它有一些边界。例如:我想要0到100之间的值,如果设置为105,那么存储的值就是100。
我首先实现了这个:
var percentage: Int{
set{
if (newValue < 0) {
self.percentage = 0
} else if (newValue > 100) {
self.percentage = 100
} else {
self.percentage = newValue
}
}
}
不幸的是,由于 setter 上的无限循环,我收到 EXC_BAD_ACCESS 错误。在寻找解决方案时,我发现了两种不同的方法:
使用两个变量的第一种方法:
var percentageWithBoundaries: Int
var percentageWithoutBoundaries: Int{
get{
return percentageWithBoundaries
}
set{
if (newValue < 0) {
percentageWithBoundaries = 0
} else if (newValue > 100) {
percentageWithBoundaries = 100
} else {
percentageWithBoundaries = newValue
}
}
}
使用 didSet 的第二种方法:
var percentage: Int{
didSet{
if (percentage < 0) {
percentage = 0
} else if (percentage > 100) {
percentage = 100
}
}
}
我认为第二种方法更好:更简洁,更容易理解。
我想知道是否有更好的做法,或者是否应该首选这两种做法中的一种。
谢谢!
像这样或根据您的需要替换您的代码;
willSet is called just before the value is stored.
didSet is called immediately after the new value is stored.
var percentage: Int = 0{
didSet{
if (percentage < 0) {
percentage = 0
} else if (percentage > 100) {
percentage = 100
}
}
}
var percentage: Int{
didSet{
if (percentage < 0) {
percentage = 0
} else if (percentage > 100) {
percentage = 100
}
}
}
这种方法最好用条件设置变量。
在 class 中,我使用了一个变量,例如百分比,我希望它有一些边界。例如:我想要0到100之间的值,如果设置为105,那么存储的值就是100。
我首先实现了这个:
var percentage: Int{
set{
if (newValue < 0) {
self.percentage = 0
} else if (newValue > 100) {
self.percentage = 100
} else {
self.percentage = newValue
}
}
}
不幸的是,由于 setter 上的无限循环,我收到 EXC_BAD_ACCESS 错误。在寻找解决方案时,我发现了两种不同的方法:
使用两个变量的第一种方法:
var percentageWithBoundaries: Int
var percentageWithoutBoundaries: Int{
get{
return percentageWithBoundaries
}
set{
if (newValue < 0) {
percentageWithBoundaries = 0
} else if (newValue > 100) {
percentageWithBoundaries = 100
} else {
percentageWithBoundaries = newValue
}
}
}
使用 didSet 的第二种方法:
var percentage: Int{
didSet{
if (percentage < 0) {
percentage = 0
} else if (percentage > 100) {
percentage = 100
}
}
}
我认为第二种方法更好:更简洁,更容易理解。
我想知道是否有更好的做法,或者是否应该首选这两种做法中的一种。
谢谢!
像这样或根据您的需要替换您的代码;
willSet is called just before the value is stored.
didSet is called immediately after the new value is stored.
var percentage: Int = 0{
didSet{
if (percentage < 0) {
percentage = 0
} else if (percentage > 100) {
percentage = 100
}
}
}
var percentage: Int{
didSet{
if (percentage < 0) {
percentage = 0
} else if (percentage > 100) {
percentage = 100
}
}
}
这种方法最好用条件设置变量。