Может кто-нибудь объяснить мне, почему следующий код, похоже, не может различать числовые типы?Странная фильтрация поведения Swift Array по типу
extension Array {
func filterByType<T>(type: T.Type) -> [T] {
var r = [T]()
for case let m as T in self {
r += [m]
}
return r
}
func filterByType2<T>(type: T.Type) -> [T] {
var r = [T]()
for m in self {
if m is T {
r += [m as! T]
}
}
return r
}
}
let objects = [1, "2", 3, "4", 5.1, [1, 2]]
typealias IntArray = [Int]
objects.filterByType(String.self) // ["2", "4"] - as expected
objects.filterByType(IntArray.self) // [[1, 2]] - as expected
objects.filterByType(Double.self) // [1, 3, 5.1] - ok, but surprised 1 & 3 aren't Ints
objects.filterByType(Int.self) // [1, 3, 5] - why?
objects.filterByType2(String.self) // ["2", "4"] - as expected
objects.filterByType2(IntArray.self) // [[1, 2]] - as expected
objects.filterByType2(Double.self) // [1, 3, 5.1] - ok, but surprised 1 & 3 aren't Ints
objects.filterByType2(Int.self) // [1, 3, 5] - why?
Не могли бы вы попробовать это с 'let objects: [Any] = ...'? Я получил результаты, которые вы ожидаете именно так, но у меня установлен более ранний Xcode. – dasblinkenlight
@dasblinkenlight: Вы правы, что дает «ожидаемые» результаты также с Xcode 7 beta 5. –