Вы можете использовать reduce
и опционные, предотвращая использование принудительной разворачивания, что может привести к сбою приложения, если строка фактически не содержит чисел.
Вот код:
let array = string.componentsSeparatedByString(",")
let initial: Int? = .None
let max = array.reduce(initial) {
let num = $1.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).toInt()
return num > $0 ? num : $0
}
Первая линия разбивает строку на массив строк - обратите внимание, что нет никакой необходимости в гипсе, так как метод уже возвращает массив строк.
Метод reduce
используется путем передачи необязательного целого числа в качестве начального значения, установленного в .None
(что является синонимом для nil
).
Закрытие, переданное в reduce
, преобразует текущее значение в целое число с использованием toInt()
, которое возвращает необязательный параметр для учета строки, не конвертируемой в действительное целое число.
Затем замыкание возвращает преобразованное число, если оно больше, чем значение, вычисленное на предыдущей итерации (или исходное значение), иначе оно возвращает значение на последней итерации.
Обратите внимание, что сравнение целых чисел и nil совершенно допустимо: любое целое значение равно всегда больше nil
(даже отрицательное значение).
Этот метод работает с «нормальным» списком номеров:
let string = "1, 2, 3, 4, 5, 6, 7" // The result is 7
, но и списки, имеющие номера и не-числа:
let string = "1, 2, three, 4, 5, 6, seven" // the result is 6
и списки, не содержащие номера:
let string = "one, two, three, three, four, five, six, seven" // the result is nil
Опционы неявно инициализируются на 'nil',' = .None' не требуется. –
Я меняю 'let initial: Int? = .None' для 'let initial: int! = .None' Потому что мне нужно получить строку, поэтому 'return" \ (max) "' будет иметь некоторую 'необязательную строку', но' int! 'Будет в порядке. В любом случае, спасибо за ваш ответ! – KaKa
@KaKa: Сделать это неявно разворачиваемым необязательно означает, что вы получите результат, отличный от нуля. Если бы я был в вас, я бы ограничил их использование в действительно необходимых случаях, предпочитая обычные опции во всех остальных случаях. – Antonio