如何将浮点数乘以bool值0或1?

时间:2018-04-27 09:41:51

标签: swift function boolean

下面的代码给出了断点错误:

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的浮点数,因为我输入的数字是浮点数。为什么会导致崩溃?感谢。

3 个答案:

答案 0 :(得分:3)

通过简单的解决方法,您可以轻松修复

let numDoubled = num + ( (noise && binaural) ? weighting : 0.0 ) )

Converting bool into int is here但在我的解决方案中,没有必要做双重工作(转换为int然后再转换为float)

根据 vacawama 评论更新

您的评论更新了答案:

{{1}}

答案 1 :(得分:3)

与(Objective-)C不同,其中nil0false被视为相同的值,具体取决于环境IntBool与Swift无关,Swift Bool没有intValue

如果weightingnum,您实际上想要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,因此为了清楚起见,最好明确写出转换。