Необязательная проблема преобразования 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. Нет никакого способа, чтобы это могло быть ноль. Поэтому вам не нужно объявлять его как необязательный.