Swift泛型数组到特定类型

zum*_*zum 0 generics ios swift

我正在编写一个需要返回项目数组的函数.在函数中将有一些逻辑将确定我想从函数返回的项的类型.我开始这样的事情:

func testFunc<T>(option:Int) -> [T] {
    var result:[T] = []

    switch option {
    case 1:
        let sampleString:String = "hello"
        result.append(sampleString)
    case 2:
        let sampleInt:Int = 23
        result.append(sampleInt)
    default:
        return result
    }

    return result
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

"cannot invoke append with an argument list of type '(String)', 
and 
"cannot invoke append with an argument list of type '(Int)'
Run Code Online (Sandbox Code Playgroud)

这很有道理,但是,我想弄清楚如何解决我的问题.当我调用该函数时,我不知道返回的数组中将包含什么类型,但该函数将知道在开始将数据附加到数组之前如何确定类型.

我怎样才能在Swift中实现这一目标?

Pal*_*lle 5

Swift不支持多种类型的变量.使用泛型T使函数通用,因此调用者可以选择返回类型.你应该重新考虑你的设计.

如果您确实想要根据参数返回多个结果类型,可以使用以下几种方法:

1:使用Any数组.

var result:[Any] = []
Run Code Online (Sandbox Code Playgroud)

2:使用带有关联值的枚举

enum TestFuncResult {
    case string(String)
    case int(Int)
}

func testFunc(option: Int) -> [TestFuncResult] {
    var result:[TestFuncResult] = []

    switch option {
    case 1:
        let sampleString:String = "hello"
        result.append(.string(sampleString))
    case 2:
        let sampleInt:Int = 23
        result.append(.int(sampleInt))
    default:
        return result
    }

    return result
}
Run Code Online (Sandbox Code Playgroud)