Двоичный оператор '*' не может применяться к двум 'Int?' операнды - PullRequest
0 голосов
/ 11 июня 2019

Попытка рассчитать ИМТ (индекс массы тела) как приложение в Swift.Создание функции вычисления Я не могу найти решение

@IBOutlet weak var height: UITextField!
@IBOutlet weak var weight: UITextField!

@IBAction func calculate(_ sender: UIButton) {

    }

@IBAction func reset(_ sender: UIButton) {
    }

func calculateIMC(){

    var textHeight = height.text
    var textWeight = weight.text
    var intHeight:Int? = Int(textHeight!) ?? 0
    var intWeight:Int? = Int(textWeight!) ?? 0

    let calculateHeight: Int? = (intHeight * intHeight)
}

Сообщение об ошибке в последней строке кода:

Двоичный оператор '*' нельзя применить к двум 'Int?Операнды

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

Проблема в бессмысленных и неправильных аннотациях типов.Удалить их!Все значения не являются необязательными (и константами)

func calculateIMC(){

    let textHeight = height.text
    let textWeight = weight.text
    let intHeight = Int(textHeight!) ?? 0
    let intWeight = Int(textWeight!) ?? 0

    let calculateHeight = intHeight * intHeight // probably intHeight * intWeight
}
0 голосов
/ 11 июня 2019

Не разворачивайте переменную, если вы не уверены, что ее значение не равно nil. Используйте flatMap, чтобы получить необходимое значение в одной строке:

func calculateIMC() {
    let textHeight = height.text
    let textWeight = weight.text
    let intHeight = textHeight.flatMap { Int($0) } ?? 0
    let intWeight = textWeight.flatMap { Int($0) } ?? 0
    let calculateHeight = intHeight * intHeight
}

Весь код в этом посте был протестирован в Xcode 10.2.1.

...