阅读Tim Ekl撰写的this文章 - " Swift技巧:按类型搜索对象",我认为"肯定有那里的通用功能......& #34;所以我编码了这个:
class One {}
let mixedArray:[Any] = ["One", 1, 1.0, One()]
func filterType1<T>(array: [Any]) -> [T] { // Compiles fine, but cannot be called
return array.flatMap( { $0 as? T })
}
//let f1 = filterType1<Int>(array: mixedArray) // syntax error
//let f1 = filterType1(array: mixedArray) // generic parameter 'T' could not be inferred
经过反思,很明显,如果我不能在函数名中指定类型,编译器就无法在编译时推断T
的类型,所以为了实现这一点,我需要做出看似虚假的变化:
func filterType2<T>(sampleType: T, array: [Any]) -> [T] {
return array.flatMap( { $0 as? T })
}
let f2 = filterType2(sampleType: 2, array: mixedArray)// [1] as required
然而,我的问题是&#34;为什么函数的定义在无法调用时编译?&#34;
答案 0 :(得分:1)
试试这个:
let f1: [Int] = filterType1(array: mixedArray) // [1]
答案 1 :(得分:1)
另一种方法:
let f1 = filterType1(array: mixedArray) as [Int]