Swift 如何将浮点值乘以布尔值0或1?
下面的代码给出了一个断点错误:Swift 如何将浮点值乘以布尔值0或1?,swift,function,boolean,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() } fu
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()
}
func-doScore(num:Float,双耳:Bool,noise:Bool)->Float{
如果50…100~=num{
让numDoubled=num+(Float(noise.intValue()!)*weighting)/通过执行一个简单的解决方法,您可以轻松地修复它
let numDoubled = num + (noise ? weighting : 0.0)
但在我的解决方案中,不需要做双重工作(转换为int,然后再转换为float)
根据vacawama评论更新
根据您的评论更新答案:
let numDoubled = num + ( (noise && binaural) ? weighting : 0.0 ) )
通过做一个简单的变通方法,您可以轻松地修复它
let numDoubled = num + (noise ? weighting : 0.0)
但在我的解决方案中,不需要做双重工作(转换为int,然后再转换为float)
根据vacawama评论更新
根据您的评论更新答案:
let numDoubled = num + ( (noise && binaural) ? weighting : 0.0 ) )
即使删除了bool
和数值类型之间的隐式转换,也可以通过首先将bool
转换为NSNumber
来显式地将其转换为数值类型
let numDoubled = num + Float(truncating: NSNumber(booleanLiteral: noise)) * weighting
您还可以执行Float(截断:噪波)
作为简写符号,但该调用隐式地将bool
转换为NSNumber
,因此为了清晰起见,最好显式地写出转换。即使已删除bool
和数值类型之间的隐式转换,也可以显式地将bool
转换为数值类型by首先将其转换为NSNumber
let numDoubled = num + Float(truncating: NSNumber(booleanLiteral: noise)) * weighting
您也可以使用Float(truncating:noise)
作为简写符号,但该调用会将bool
隐式转换为NSNumber
,因此为了清晰起见,最好显式写出转换。与in(Objective-)不同C其中nil
、0
和false
被视为相同的值,具体取决于环境Int
和Bool
在Swift中不相关,SwiftBool
没有intValue
let numDoubled = noise ? num + weighting : num
实际上,如果噪波
为真
,则需要将权重
添加到num
let numDoubled = noise ? num + weighting : num
如果确实需要将false
转换为0
并将true
转换为1
写入
let boolAsInt = aBool ? 1 : 0
与(目标-)C中的nil
不同,0
和false
被视为相同的值,具体取决于环境Int
和Bool
在Swift中不相关,SwiftBool
没有intValue
let numDoubled = noise ? num + weighting : num
实际上,如果噪波
为真
,则需要将权重
添加到num
let numDoubled = noise ? num + weighting : num
如果确实需要将false
转换为0
并将true
转换为1
写入
let boolAsInt = aBool ? 1 : 0
我不认为这是一种解决方法,因为用布尔值乘以浮点值没有任何意义:)我喜欢这样,它工作得很好,有没有办法同时乘以噪声和双耳?我的例子是:let numOutput=num*(噪声和双耳?权重:0.0)所以我基本上想用双耳和噪声相乘,即使在这种情况下它们中的任何一个为0或为假。:)本质上,我试图让它与双耳和噪声相乘,然后再乘以权重。@LukeIreton更新了我的答案,请检查。如果你想相乘,用*
替换。如果我的答案是100和both双耳和噪声=真然后我得到125作为我的返回数,这很好,但我基本上是想让它达到我输入的数字乘以双耳和噪声,然后加权。如果我输入100,双耳和噪声为真,那么输出应该是150,如果我输入100,只有一个布尔值为假,那么只有m将它乘以1,然后再乘以权重,得到125。谢谢你。感谢你的帮助,曼尼,我自己已经计算出了最后一部分。我不认为这是一个解决办法,因为用布尔值乘以浮点值没有任何意义:)我喜欢这个方法,它工作得很好,有没有办法同时乘以噪声和双耳?我的例子是:设numOutput=num*(噪声和双耳加权:0.0)所以我基本上想用双耳和噪声相乘,即使在这种情况下它们中的任何一个为0或为假。:)本质上,我试图让它与双耳和噪声相乘,然后再乘以权重。@LukeIreton更新了我的答案,请检查。如果你想相乘,用*
替换。如果我的答案是100和both双耳和噪声=真然后我得到125作为我的返回数,这很好,但我基本上是想让它达到我输入的数字乘以双耳和噪声,然后加权。如果我输入100,双耳和噪声为真,那么输出应该是150,如果我输入100,只有一个布尔值为假,那么只有m将其乘以1,然后再乘以权重,得到125。谢谢。谢谢你的帮助,曼尼,我已经自己算出了最后一部分。:)