Swift 3 sequence(state:next:).
Swift 3.1
let number = 123456
let array = Array(sequence(state: number,
next: { return $0 > 0 ? ($0 % 10, $0 = $0/10).0 : nil }
).reversed())
print(array) // [1, 2, 3, 4, 5, 6]
Swift 3.0
let number = 123456
let array = Array(sequence(state: number,
next: { (num: inout Int) -> Int? in
return num > 0 ? (num % 10, num /= 10).0 : nil
}).reversed())
print(array)
, , ([]) - number - 0. :
:
let number = ...
let array: [Int]
if number == 0 { array = [0] }
else {
array = Array(sequence(state: abs(number),
next: { return $0 > 0 ? ($0 % 10, $0 = $0/10).0 : nil }
).reversed())
}
let array: [Int]
if number == 0 { array = [0] }
else {
array = Array(sequence(state: number,
next: { (num: inout Int) -> Int? in
return num > 0 ? (num % 10, num /= 10).0 : nil
}).reversed())
}
, "() - , tuple ()", , , @MartinR answer. (Int, ()) state num; () -return "" .
defer return. I.e., return:
return num > 0 ? (num % 10, num /= 10).0 : nil
( " " )
return num > 0 ? { defer { num /= 10 }; return num % 10 }() : nil
, , , sequence(state:next:) .
Swift 3.0 vs 3.1: next
- (Swift 3.1 ) , SR-1976 ( Swift 3 inout params), Swift inout . . Q & A :
state next Swift 3.0 , next Swift 3.1.