Swift泛型数组到特定类型

时间:2016-08-28 00:29:48

标签: ios swift generics

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

@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中实现这一目标?

1 个答案:

答案 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
}