无法推断出泛型参数"T"的参数

Dan*_*iel 6 generics swift

我想创建一个通用的辅助函数来进行一些处理.它的一个输入将是一个返回一个数组的函数.

我无法弄清楚如何做到这一点.我一直收到编译错误.我找到了帖子

无法推断出泛型参数的参数

并尝试添加...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)

Mat*_*mbo 5

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]等).

可能您可能需要更改某些类型声明以满足您的设计需求.

希望这可以帮助