繁体   English   中英

Swift枚举 - 约束相关值

[英]Swift enum - constrain associated values

我有一个枚举,表示一个线宽,可以是一个恒定的宽度,或相对于它所在视图大小的宽度。

enum Thickness {
    case Constant(Float)    // where value ≥ 0
    case Relative(Float)    // where 0 ≤ value ≤ 1
}

有没有办法将这些相关的值约束构建到枚举类型中? 我目前在这种类型的属性上使用didSet属性观察者:

var lineThickness: Thickness {
    didSet {
        switch lineThickness {
            case let .Relative(x): lineThickness = .Relative(min(max(x, 0), 1))
            case let .Constant(x): lineThickness = .Constant(max(x, 0))
        }
    }
}

但是,如果我能为整个类型做一次这样做,那将会更加简洁,而不是为每个属性复制这个观察者。

我知道我可以为枚举创建初始化器或方法,但我不确定是否/如何使用它来约束相关值?

好吧,不是最好的优雅,但至少它会因为忘记观察者在这里和那里而免于虫子...

struct Thickness {
    enum Type {
        case Constant
        case Relative
    }
    let type: Type
    let value: Float

    init(type: Type, value: Float) {
        self.type = type;
        switch type {
            case .Constant:
                self.value = max(value, 0)
            case .Relative:
                self.value = min(max(value, 0), 1)
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM