首页 > 解决方案 > 无法将“Int”类型的值分配给“Range”类型' 和二元运算符 '*' 不能应用于 '_' 和 'Float' 类型的操作数

问题描述

我得到了这个错误。此外,函数范围无法对我范围内的某些值进行这种乘法和除法。我该如何解决这个问题?

class ballShooter {
    var ballShooter : Int = 0
    var teta = 0 ..< 90
    var v = 0 ..< 100
    var g  = 10
    
    init(ballShooter:Int,teta:Int,v:Int,g:Int) {
        self.ballShooter = ballShooter
        self.teta = teta
        self.v = v
        self.g = g
    }
    
    
    func range(r: Int)->Int {
       let r = v * v * sin(2 * teta) / g
       return r
    }
}

标签: iosswiftclass

解决方案


当您声明时,var teta = 0 ..< 90您是在告诉编译器变量teta(theta?)包含从 0 到小于 90 的半开 Int 范围。因此,您的初始化程序需要为teta参数采用 Int 类型的值。

你真的想要 teta 并v包含范围吗?或者您是否试图对调用者可以分配给这些变量的值设置限制?

编辑:

如果您的目标是对变量值的合法范围设置限制,则必须自己实现。以下是一些示例代码,说明了如何执行此操作:

class Foo {
    
    // This determines the legal range of values for aVal.
    public var validValRange = 50...200
    
    public var aVal: Int {
        set {
            // Make sure the value is in range before updating the internal var
            if validValRange ~= newValue {
                _aVal = newValue
            }
        }
        get {
            // Return the previously validated value.
            return _aVal
        }
    }
    
    // This is a private variable that stores validated values for aVal
    private var _aVal: Int = 0
}

您可以使用如下代码对其进行测试:

let aFoo = Foo()

aFoo.aVal = 52
aFoo.aVal = 500

print(aFoo.aVal)

这将打印“52”,因为值 500 超出范围。


推荐阅读