通用函数查询

时间:2017-05-15 15:21:25

标签: swift generics

阅读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;

2 个答案:

答案 0 :(得分:1)

试试这个:

let f1: [Int] = filterType1(array: mixedArray) // [1]

答案 1 :(得分:1)

另一种方法:

let f1 = filterType1(array: mixedArray) as [Int]