下面的代码给出了断点错误:
func doScore(num: Float, binaural: Bool, noise: Bool) -> Float {
if 50 ... 100 ~= num{
let numDoubled = num + (Float(noise.intValue()!) * weighting)// <--- this is where I get my error
return numDoubled.rounded()
}
我想要做的就是将我放入函数的数字乘以bauolean值或者布尔值的噪音。要做到这一点,我得到了Int值但是我需要它作为0或1的浮点数,因为我输入的数字是浮点数。为什么会导致崩溃?感谢。
答案 0 :(得分:3)
通过简单的解决方法,您可以轻松修复
let numDoubled = num + ( (noise && binaural) ? weighting : 0.0 ) )
Converting bool into int is here但在我的解决方案中,没有必要做双重工作(转换为int然后再转换为float)
根据 vacawama 评论更新
您的评论更新了答案:
{{1}}
答案 1 :(得分:3)
与(Objective-)C不同,其中nil
,0
和false
被视为相同的值,具体取决于环境Int
和Bool
与Swift无关,Swift Bool
没有intValue
。
如果weighting
为num
,您实际上想要noise
添加true
。
let numDoubled = noise ? num + weighting : num
如果您确实需要将false
转换为0
并将true
转换为1
,请写
let boolAsInt = aBool ? 1 : 0
答案 2 :(得分:0)
即使bool
和数字类型之间的隐式转换已被删除,您也可以先将bool
转换为数字类型,然后再将其转换为NSNumber
。
let numDoubled = num + Float(truncating: NSNumber(booleanLiteral: noise)) * weighting
您也可以Float(truncating: noise)
作为速记符号,但该调用会隐式将bool
转换为NSNumber
,因此为了清楚起见,最好明确写出转换。