我想创建一个通用的辅助函数来进行一些处理.它的一个输入将是一个返回一个数组的函数.
我无法弄清楚如何做到这一点.我一直收到编译错误.我找到了帖子
并尝试添加...as [String]或... as [Int]等,但没有运气.
func helperThatDoesSomeGenericProcessing<T>(displayedStrings: () -> [T]) -> [String]! {
let listOfSomething: [T] = displayedStrings()
// do something with listOfSomething
return ["some", "resulting", "string", "from", "the", "input"]
}
func concreteFunction1() -> [AnyObject]! {
var s: [String] = helperThatDoesSomeGenericProcessing { // ERROR: Argument for generic parameter 'T' could not be inferred.
var str = ["One", "Two", "Three"]
} // tried 'as [String]' here
// do something with s
return s
}
func concreteFunction2() -> [AnyObject]! {
var s: [Int] = helperThatDoesSomeGenericProcessing { // ERROR: Argument for generic parameter 'T' could not be inferred.
var i = [1, 2, 3]
} // tried 'as [Int]' here
// do something with s
return s
}
Run Code Online (Sandbox Code Playgroud)
return适当地添加并明确地声明() -> [T]解决错误的具体类型...但我不确定它会得到你想要的东西.无论如何这里是代码:
func helperThatDoesSomeGenericProcessing<T>(displayedStrings: () -> [T]) -> [String]! {
let listOfSomething: [T] = displayedStrings()
// do something with listOfSomething
return ["some", "resulting", "string", "from", "the", "input"]
}
func concreteFunction1() -> [AnyObject]! {
var s: [String]! = helperThatDoesSomeGenericProcessing {
() -> [String] in // Explicit declared type
var str = ["One", "Two", "Three"]
return str
} // tried 'as [String]' here
// do something with s
return s
}
func concreteFunction2() -> [AnyObject]! {
var s: [String]! = helperThatDoesSomeGenericProcessing {
() -> [Int] in // Explicit declared type
var i = [1, 2, 3]
return i
} // tried 'as [Int]' here
// do something with s
return s
}
Run Code Online (Sandbox Code Playgroud)
注意我也更正了类型,var s因为你的泛型函数总是返回一个隐式解包的可选字符串数组[String]!.返回类型不是一般化的(即:T或[T]等).
可能您可能需要更改某些类型声明以满足您的设计需求.
希望这可以帮助