Подтвердить что ты не робот

Оператор Swift оператора "*" на двух входах

У меня здесь очень странная ошибка, и я искал все вокруг, и я пробовал все предложения. Ничего не работает.

scrollView.contentSize.height = 325 * globals.defaults.integer(forKey: "numCards")

Двоичный оператор '*' не может применяться к двум операндам 'Int'

WTF Swift! Почему нет? Я умножаю Ints все время. Это два Ints. globals.defaults - это всего лишь экземпляр UserDefaults.standard. Я каждый раз пробовал с такой же ошибкой.

325 * Int(globals.defaults.integer(forKey: "numCards")   //NOPE

Int(325) * Int(globals.defaults.integer(forKey: "numCards"))  //NOPE

if let h = globals.defaults.integer(forKey: "numCards"){
    325 * h  //NOPE, and 'Initializer for conditional binding must have optional type, not Int'
}

let h = globals.defaults.integer(forKey: "numCards") as! Int
325 * h //NOPE, and 'Forced cast of Int of same type as no affect'

325 * 2 //YES!  But no shit...

Все эти "попытки" казались пустой тратой времени, поскольку я знаю, что оба они Ints... и я был прав. Пожалуйста, порекомендуйте. Спасибо!

4b9b3361

Ответ 1

Ошибка вводит в заблуждение. Проблема заключается в попытке присвоить значение Int переменной CGFloat.

Это будет работать:

scrollView.contentSize.height = CGFloat(325 * globals.defaults.integer(forKey: "numCards"))

Причина ошибочной ошибки (спасибо Daniel Hall в комментариях ниже) объясняется тем, что компилятор выбирает функцию *, которая возвращает CGFloat из-за требуемого возвращаемого значения. Эта же функция ожидает два параметра CGFloat. Поскольку эти два аргумента предоставляются Int вместо CGFloat, компилятор предоставляет ошибочную ошибку:

Двоичный оператор '*' не может применяться к двум операндам 'Int'

Было бы неплохо, если бы ошибка была больше похожа:

Двоичный оператор '*' не может применяться к двум операндам 'Int'. Ожидание двух операндов CGFloat.