String to Int в Swift 3.0
Используя Swift, я пытаюсь взять список чисел, вводимых в текстовое представление в приложении, и создать сумму этого списка, извлекая каждый номер для калькулятора классов. Также каждый раз изменяется количество значений, вводимых пользователем. Пример показан ниже:
Строка: 98,99,97,96...
Попытка получить: 98 + 99 + 97 + 96...
Пожалуйста, помогите!
Благодаря
Ответы
Ответ 1
- Используйте
components(separatedBy:)
, чтобы разбить строку, разделенную запятыми.
- Используйте
trimmingCharacters(in:)
для удаления пробелов до и после каждого элемента
- Используйте
Int()
для преобразования каждого элемента в целое число.
- Используйте
flatMap
для удаления любых элементов, которые не могут быть преобразованы в Int
.
-
Используйте reduce
для суммирования массива Int
.
let input = " 98 ,99 , 97, 96 "
let values = input.components(separatedBy: ",").flatMap { Int($0.trimmingCharacters(in: .whitespaces)) }
let sum = values.reduce(0, +)
print(sum) // 390
Ответ 2
Для Swift 3 и Swift 4.
Простой способ: Жесткий код. Полезно только, если вы знаете точное количество целых чисел, желающих получить расчет и распечатать/использовать дальше.
let string98: String = "98"
let string99: String = "99"
let string100: String = "100"
let string101: String = "101"
let int98: Int = Int(string98)!
let int99: Int = Int(string99)!
let int100: Int = Int(string100)!
let int101: Int = Int(string101)!
// optional chaining (if or guard) instead of "!" recommended. therefore option b is better
let finalInt: Int = int98 + int99 + int100 + int101
print(finalInt) // prints Optional(398) (optional)
Необычный способ как функция: Общий способ. Здесь вы можете поместить столько строк, сколько вам нужно в конце. Вы могли бы, например, сначала собрать все строки, а затем использовать массив для расчета.
func getCalculatedIntegerFrom(strings: [String]) -> Int {
var result = Int()
for element in strings {
guard let int = Int(element) else {
break // or return nil
// break instead of return, returns Integer of all
// the values it was able to turn into Integer
// so even if there is a String f.e. "123S", it would
// still return an Integer instead of nil
// if you want to use return, you have to set "-> Int?" as optional
}
result = result + int
}
return result
}
let arrayOfStrings = ["98", "99", "100", "101"]
let result = getCalculatedIntegerFrom(strings: arrayOfStrings)
print(result) // prints 398 (non-optional)
Ответ 3
let myString = "556"
let myInt = Int(myString)