ios - 无法将“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
}
}
解决方案
当您声明时,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 超出范围。
推荐阅读
- httpserver - http-server 给出警告信息
- python - 查找每年一组客户的最后交易日期并提取价值
- python - Django(模型):通过选择选项自动选择并返回一个值
- python-3.x - str、double 和 complex 的全部值范围是多少,包括它们在内存中的大小?
- codenameone - 使用 cn1-codescan lib 在扫描屏幕上按下信息按钮后,iOS 应用程序崩溃
- android - 如何获取通过window.open为Android WebView传入的窗口功能?
- javascript - 如何在不影响其子元素的情况下更改元素标签?
- amazon-web-services - 点击网站超链接时,http请求的源IP地址是什么
- javascript - 从本地存储检索后对象方法未定义?
- windows - Azure DevOps 服务器上出现“输入行太长”的批处理命令 vcvarsall.bat 错误