Необходимо ли установить переменную «possibleIntegerValue» в «необязательный Int (Int?)» или вместо этого можно установить «possibleIntegerValue» в тип «Int»?

Я новичок в Swift и пытаюсь изучить концепцию необязательных значений. Мой вопрос в том, что в контексте предыдущего кода необходимо установить переменную «possibleIntegerValue» в «необязательный Int (Int?)», или можно опустить знак ? и вместо этого установить «possibleIntegerValue» в тип «Int» ?

Какое влияние это окажет, если я действительно изменю тип с необязательного Int на Int?

let numberSymbol: Character = "三"  // Simplified Chinese for the number 3
var possibleIntegerValue: Int?
switch numberSymbol {
case "1", "١", "一", "๑":
    possibleIntegerValue = 1
case "2", "٢", "二", "๒":
    possibleIntegerValue = 2
case "3", "٣", "三", "๓":
    possibleIntegerValue = 3
case "4", "٤", "四", "๔":
    possibleIntegerValue = 4
default:
    break
}
if let integerValue = possibleIntegerValue {
    print("The integer value of \(numberSymbol) is \(integerValue).")
} else {
    print("An integer value could not be found for \(numberSymbol).")
}

person Thor    schedule 20.01.2016    source источник
comment
Вам нужно будет присвоить ему 0 или значение по умолчанию вместо того, чтобы оставлять его равным нулю.   -  person Leo Dabus    schedule 20.01.2016
comment
Можешь оставить как есть сейчас. возможное целое значение: целое? И, очевидно, вам нужно, чтобы он был равен нулю, если ни один из случаев переключения не соответствует числовому символу.   -  person Shripada    schedule 20.01.2016


Ответы (1)


Необязательные параметры позволяют вам иметь случай, когда нет значения. У вас есть следующие варианты объявления переменной:

var possibleIntegerValue: Int?      // Optional Int
var possibleIntegerValue: Int = 0   // Not optional but must *always* have a value
var possibleIntegerValue: Int!      // Implicitly unwrapped Optional Int

В третьем варианте выше вы гарантируете, что possibleIntegerValue будет иметь значение к моменту первого использования (иначе ваше приложение рухнет с необработанным исключением).

Поскольку в вашем операторе switch есть default, который не дает possibleIntegerValue значения, использование необязательных Int кажется уместным.

person Michael    schedule 20.01.2016