Необязательная проблема преобразования String в Int в Swift 1.2
Я не могу понять, почему этот "необязательный" не работает в сценарии 1, но без дополнительного? он работает в сценарии 2.
Использование Swift v 1.2, xCode 6.2
var stuff = "6t"
// SCENARIO 1
// Why is this failing when stuff contains non-digit characters?
// i.e. it works if stuff = "45".
if let value: Int? = stuff.toInt() {
println("value \(value!)")
}
// SCENARIO 2
// This works!
if let value = stuff.toInt() {
println("val3 \(value)")
}
Для справки также см. эти ответы:
* Интересно, не является ли пример Sift 1.2/Answer здесь просто неправильным?
Swift - Преобразование String в Int
Преобразование String в Int в Swift
Ответы
Ответ 1
Первый IF всегда прав.
Infact в обоих случаях:
- когда
toInt()
возвращает допустимый Int
- когда возвращается
nil
if let
будет успешным (и да, первый IF бесполезен).
В частности, в вашем коде toInt()
возвращается nil
в обоих сценариях.
Но в первом сценарии вы просто принимаете nil
как допустимое значение для ввода блока THEN.
Ответ 2
Нет смысла использовать if let value: Int?
. Если работает if let
, значение равно Int
. Нет никакого способа, чтобы это могло быть ноль. Поэтому вам не нужно объявлять его как необязательный.