Chamada de genéricos com o tipo T no Swift

No meu aplicativo, quero criar um método genérico que crie uma matriz de objetos dependendo do tipo T.

Eu criei a seguinte função:

func getArray<T : ROJSONObject>(key:String) -> T[] {
    var elements = T[]()

    for jsonValue in getValue(key).array! {
        var element = T()

        element.jsonData = jsonValue
        elements.append(element)
    }

    return elements
}

Agora eu quero passar o tipo quando chamo o método, para que ele saiba qual o tipo que deve criar internamente. Eu acho que em Java e C # você pode usar um método como esse:

object.getArray<Document>("key")

Quando eu chamo assim, sempre recebo o erro:

Cannot explicitly specialize a generic function

Portanto, minha correção foi definir um parâmetro adicional que contenha uma instância do tipo T para detectar automaticamente o tipo:

func getArray<T : ROJSONObject>(key:String, type:T) -> T[] {
    var elements = T[]()

    for jsonValue in getValue(key).array! {
        var element = T()

        element.jsonData = jsonValue
        elements.append(element)
    }

    return elements
}

Realmente não há outra maneira de obter esse comportamento sem passar por uma instância não utilizada? Ou estou entendendo algo errado?

Teste aprofundado

Após a resposta do jtbandes, fiz mais alguns testes. Tentei forçar o Type adicionando oas na chamada.

class Person {

    init() { }

    func getWorkingHours() -> Float {
        return 40.0
    }
}

class Boss : Person {
    override func getWorkingHours() -> Float {
        println(100.0)
        return 100.0
    }
}

class Worker : Person {
    override func getWorkingHours() -> Float {
        println(42.0)
        return 42.0
    }
}

func getWorkingHours<T : Person>() -> T {
    var person = T()
    person.getWorkingHours()

    return person
}

var worker:Worker = getWorkingHours() as Worker
var boss:Boss = getWorkingHours() as Boss
worker.getWorkingHours() // prints out 40.0 instead of 42.0
boss.getWorkingHours() // prints out 40.0 instead of 100.0

Então, de alguma forma, o tipo é sempre o tipo base, mesmo que eu tenha especificado o tipo com oas palavra-chave Eu sei que o exemplo não faz muito sentido, mas foi apenas para fins de teste ..

questionAnswers(7)

yourAnswerToTheQuestion