Прежде всего, вы должны, вероятно, не инициализировать вас массив строк с форсированным unwrappings необязательных строк (что, если один из текстовых полого .text
свойства является nil
? Исключение Runtime). Вы можете сделать это безопасным способом, используя всухую оператор коалесцирующий:
let myStringArr = [textField1.text ?? "0", textField2.text ?? "0"]
Теперь, то же самое преобразование типов: например, строка «foo» вернет нуль для попытка конверсия Int("foo")
(не, per se, преобразование, но инициализация Int
по String
). Таким образом, учитывая, вы благополучно прибыли в массиве строк (как в примере коды выше), вы можете, опять же, использовать всухую оператор коалесцирующего для обеспечения безопасной инициализации из Int
записей в вашем Int
массиве:
let myStringArr = ["1", "foo", "4", "bar", "3.5"]
let myIntArrSafe = myStringArr.map { Int($0) ?? 0 }
print(myIntArrSafe)
/* [1, 0, 4, 0, 0] */
Другим решением будет расширение типа String
путем безопасного целочисленного преобразования, возвращающего 0
в случае Int
по ошибке String
.
extension String {
var integerValue: Int { return Int(self) ?? 0 }
}
let myStringArr = ["1", "foo", "4", "bar", "3.5"]
let myIntArrSafe = myStringArr.map { $0.integerValue }
print(myIntArrSafe)
/* [1, 0, 4, 0, 0] */
Что делать, если текстовое поле не содержит допустимого целочисленного представления? – zaph
@SergiiZhevzhyk Просто примечание: принятый ответ в дубликате (я согласен, что он очень близок к дубликату) также представляет собой небезопасную версию с принудительной разворачиванием, как и исходный ответ flashspys. Лучше всего было бы, если бы связанная почта могла обновить свой ответ безопасным методом, но до тех пор я предлагаю, чтобы этот пост не был закрыт как дубликат. – dfri
@dfri первый комментарий в принятом ответе уже делает это –