Как умножить число с плавающей запятой на значение bool 0 или 1? - PullRequest
0 голосов
/ 27 апреля 2018

Мой код ниже дает ошибку точки останова:

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()


}

Все, что я хочу сделать, это умножить число, которое я помещаю в функцию, на значение бинаурального или шума, которые являются логическими значениями. Для этого я получаю значение Int, однако мне нужно, чтобы оно было числом с плавающей запятой равным 0 или 1, поскольку число, которое я вставляю, является числом с плавающей запятой. Почему это может привести к сбою? Спасибо.

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Даже если неявное преобразование между bool и числовыми типами было удалено, вы можете явно преобразовать bool в числовые типы, предварительно преобразовав его в NSNumber.

let numDoubled = num + Float(truncating: NSNumber(booleanLiteral: noise)) * weighting

Вы также можете сделать Float(truncating: noise) в качестве сокращенной записи, но этот вызов неявно преобразует bool в NSNumber, поэтому для ясности лучше записать преобразование явно.

0 голосов
/ 27 апреля 2018

В отличие от (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
0 голосов
/ 27 апреля 2018

Делая простой обходной путь, вы можете легко это исправить

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

Здесь конвертируется bool в int но в моем решении нет необходимости выполнять двойную работу (преобразовать в int и затем снова преобразовать в float)

Обновлен согласно vacawama комментарий

Обновленный ответ от вашего комментария:

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