Swift通用函数参数为Class

时间:2015-03-02 15:38:44

标签: ios swift protocols

我不确定这不重复。我有协议和几个类似的问题。

protocol DbObject: class {
    class func tableName() -> String
    init(set: FMResultSet)
    func save(db: FMDatabase) 
}

在这里我如何使用它:

func updateTable<T where T:DbObject>(nodes: [T]) {
    self.db.executeUpdate("DELETE from \(T.tableName())")
    for elem in nodes {
        elem.save(self.db)
    }
}

func loadAllFromObjectTable<T where T:DbObject>(cl: T) -> [T] {
    var objArr = [T]()
    if let set = db.executeQuery("select * from \(T.tableName())") {
        while (set.next() ?? false) {
            let obj = T(set: set)
            objArr.append(obj)
        }
    }
    return objArr
}

但是我希望函数loadAllFromObjectTable得到参数类来确认协议,而不是对象。我怎样才能做到这一点?

修改
从这里https://stackoverflow.com/a/26229630/820795

func loadAllFromObjectTable<T where T:DbObject>(_: T.Type) -> [T] {
    var objArr = [T]()
    if let set = db.executeQuery("select from \(T.tableName())") {
        while (set.next() ?? false) {
            if let obj = T(set: set)
            objArr.append(obj)
        }
    }
    return objArr
}

用法:

manager.loadAllFromObjectTable(SignNote.self)

0 个答案:

没有答案