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

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

Привет, у меня есть вопрос об этом коде:

1)

let label = "The width is "
let width = 94
let widthLabel = label + String(width)

2)

let height = "3"
let number = 4
let hieghtNumber = number + Int(height)

Первая часть работает очень хорошо, но я не понимаю, почему второй - нет. Я получаю ошибку "Двоичный оператор" + "не может применяться к двум int-операндам", что для меня не имеет большого смысла. Может кто-нибудь помочь мне с некоторым объяснением?

4b9b3361

Ответ 1

1) Первый код работает, потому что String имеет метод init, который принимает Int. Тогда на линии

let widthLabel = label + String(width)

Вы объединяете строки с помощью оператора + для создания widthLabel.

2) Сообщения об ошибках Swift могут быть довольно вводящими в заблуждение, актуальная проблема Int не имеет метода init, который принимает String. В этой ситуации вы можете использовать метод toInt на String. Вот пример:

if let h = height.toInt() {
    let heightNumber = number + h
}

Вы должны использовать оператор if let для проверки String, который может быть преобразован в Int, так как toInt вернет nil, если он терпит неудачу; принудительное развертывание в этой ситуации приведет к краху вашего приложения. См. Следующий пример того, что произойдет, если height не было конвертировано в Int:

let height = "not a number"

if let h = height.toInt() {
    println(number + h)
} else {
    println("Height wasn't a number")
}

// Prints: Height wasn't a number

Обновление Swift 2.0:

Int теперь имеет инициализатор, который принимает String, делая пример 2 (см. выше):

if let h = Int(height) {
    let heightNumber = number + h
}

Ответ 2

Что вам нужно:

let height = "3"
let number = 4
let heightNumber = number + height.toInt()!

Если вы хотите получить Int из String, вы используете toInt().