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中实现这一目标?
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)
| 归档时间: |
|
| 查看次数: |
2325 次 |
| 最近记录: |