Как исправить ошибку в коде swift

Изучаю swift. Написал небольшой код, но выдает ошибку Cannot convert value of type 'String' to expected argument type 'Float'. Вот код: '''

import UIKit

print("Введите рост в сантиметрах: ")
let height = readLine()
print("Введите вес в килограммах: ")
let weight = readLine()
func squareBody (heightBody: Float, weightBody: Float) -> Float {
    let squareBodyMath = 0.0167 * pow(heightBody, 0.5) * pow(weightBody, 0.5)
    return squareBodyMath
}
var resultSquareBody = squareBody(heightBody: height!, weightBody: weight!)
let formatResultSquareBody = String(format: "%.2f", resultSquareBody)
print("Индекс массы тела: ", formatResultSquareBody)

''' Как исправить ошибку. Пробовал в resultSquareBody добавить Float(height!) - не помогает. Сделал вот так: '''

import UIKit

print("Введите рост в сантиметрах: ")
let height = Float(readLine()!)!
print("Введите вес в килограммах: ")
let weight = Float(readLine()!)!
func squareBody(heightBody: Float, weightBody: Float) -> Float {
    let squareBodyMath = 0.0167 * pow(heightBody, 0.5) * pow(weightBody, 0.5)
    return squareBodyMath
}
var resultSquareBody = squareBody(heightBody: height, weightBody: weight)
let formatResultSquareBody = String(format: "%.2f", resultSquareBody)
print("Индекс массы тела: ", formatResultSquareBody)

''' Выдает ошибку Fatal error: Unexpectedly found nil while unwrapping an Optional value Playground execution failed. В интернете толком ответа не могу найти.


Ответы (1 шт):

Автор решения: Oleg Soloviev

Замените в первой части кода на:

var resultSquareBody = squareBody(heightBody: Float(height ?? "") ?? 0, weightBody: Float(weight ?? "") ?? 0)

height и weight у вас имеют тип String?, т.е. опциональный String, потому что введения значения может не быть. Вам нужно вначале преобразовать String? в String через nil coalescing ?? "", затем получившийся Float? во Float через ?? 0.

→ Ссылка