在Swift中创建具有边界的Setter

时间:2016-04-18 08:45:34

标签: ios swift variables setter

在一个类中,我使用一个变量,如百分比,我希望它有一些边界。例如:我想要介于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
        }
    }
}

我认为第二种方法更好:更简洁,更容易理解。

我想知道是否有更好的做法,或者是否应该首选其中一种。

谢谢!

2 个答案:

答案 0 :(得分:0)

像这样或根据您的需要替换您的代码;

  在存储值之前调用

willSet

     存储新值后立即调用

didSet

var percentage: Int = 0{
    didSet{
        if (percentage < 0) {
            percentage = 0
        } else if (percentage > 100) {
            percentage = 100
        } 
    }
}

答案 1 :(得分:0)

var percentage: Int{
    didSet{
        if (percentage < 0) {
            percentage = 0
        } else if (percentage > 100) {
            percentage = 100
        }
    }
}

这种方法最好用条件设置变量。