Ответ 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
}