有人可以向我解释为什么下面的代码似乎无法区分数值类型?按类型筛选Swift数组的奇怪行为
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?
你可以试试这个用'让对象:[任何] = ...'?我得到了您期望的结果,但我已经安装了较早的Xcode。 – dasblinkenlight
@dasblinkenlight:你说得对,这也给了Xcode 7 beta 5的“预期”结果。 –