我正在编写一个需要返回项目数组的函数。在函数中将有一些逻辑将确定我想从函数返回的项的类型。我开始这样的事情:
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7')
@Grab('oauth.signpost:signpost-core:1.2.1.2')
@Grab('oauth.signpost:signpost-commonshttp4:1.2.1.2')
import groovyx.net.http.RESTClient
import static groovyx.net.http.ContentType.*
def twitter = new RESTClient( 'https://api.twitter.com/1.1/statuses/' )
// twitter auth omitted
try { // expect an exception from a 404 response:
twitter.head path: 'public_timeline'
assert false, 'Expected exception'
}
// The exception is used for flow control but has access to the response as well:
catch( ex ) { assert ex.response.status == 404 }
assert twitter.head( path: 'home_timeline.json' ).status == 200
这给了我以下错误:
@Grab
这很有意义,但是,我想弄清楚如何解决我的问题。当我调用该函数时,我不知道返回的数组中将包含什么类型,但该函数将在开始将数据附加到数组之前知道如何确定类型。
如何在Swift中实现这一目标?
答案 0 :(得分:5)
Swift不支持多种类型的变量。使用泛型T使函数通用,因此调用者可以选择返回类型。 你应该重新考虑你的设计。
如果您确实想要根据参数返回多个结果类型,可以使用以下几种解决方法:
1:使用Any阵列。
var result:[Any] = []
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
}