将绑定<Double> 转换为类型 Int - Swift UI

Casting a binding<Double> to type Int - Swift UI

我正在尝试将 Binding 值转换为 Int 值,但转换总是失败。

生成随机数需要int类型

func randomise(startNumber: Int, endNumber: Int) -> Int{
    let startNum = $value.startNumber
    let endNum = $value.endNumber
    let generated = arc4random_uniform(UInt32(endNum - startNum)) + UInt32(startNum)
        
    return Int(generated)
}

如何将 Binding 转换为标准类型?

这里是创建绑定 Observable 对象的 class。

final class Value:ObservableObject {
    @Published var startNumber: Double = 0
    @Published var endNumber: Double = 5000
}

产生的两个错误:

Initializer 'init(_:)' requires that 'Binding<Double>' conform to 'BinaryInteger'
Referencing operator function '-' on 'BinaryInteger' requires that 'Binding<Double>' conform to 'BinaryInteger'

谢谢!

@ObservedObject 是对实际对象的 属性 包装。因此,要访问这些属性的非绑定值,您可以使用 wrappedValue:

func randomise(startNumber: Int, endNumber: Int) -> Int{
        
        
        let startNum = $value.startNumber
        let endNum = $value.endNumber
        let generated = arc4random_uniform(UInt32(endNum.wrappedValue - startNum.wrappedValue)) + UInt32(startNum.wrappedValue)
            
        return Int(generated)
    }

您可以在访问您的值变量时摆脱 $,以这种方式删除绑定:

func randomise(startNumber: Int, endNumber: Int) -> Int{
        
        
        let startNum = value.startNumber
        let endNum = value.endNumber
        let generated = arc4random_uniform(UInt32(endNum - startNum)) + UInt32(startNum)
            
        return Int(generated)
    }