Передача класса (или структуры), соответствующего протоколу, в функцию, принимающую универсальный тип в качестве параметра - PullRequest
0 голосов
/ 23 мая 2018

Контекст:

1 - протокол SQLObject объявляет различные функции.(Я использую FMDB для доступа к БД)

protocol SQLObject {
    static var tableName: String { get}
    init(result: FMResultSet) throws
    ...
}

2 - Некоторые структуры, соответствующие протоколу SQLObject , реализующие необходимые функции

struct Foo : SQLObject {

    // All protocol functions implemented - No red, no yellow here :)

}

3 - Глобальныйв моем приложении определен диспетчер данных, чтобы пробуждать объекты из базы данных

class DataManager {
    static let shared = DataManager()

    func storedObjects<T: SQLObject>(_ type: T) throws -> [T] {

        // This basically does a SELECT * and returns objects of the given type
        // This is also error and warning free

    }
}

Проблема:

Я хочу десериализовать свои объекты из любой точки приложения

let foos = try DataManager.shared.storedObjects(Foo)

При сборке я получил ошибку:

Тип аргумента '(Foo) .Type' не соответствует ожидаемому типу 'SQLObject'

Тамя здесь скучаю, поскольку Foo реализует протокол SQLObject.Любое объяснение, кодирование товарищей?

...