其思想是使用coredata获取“类型”数据。
更新

class func retrieve<T: AnyObject>(entityName:T.Type, sortBy:String? = nil, isAscending:Bool? = true, predicate:NSPredicate? = nil) -> AnyObject[]    {

    println("\(entityName)")
    let request = NSFetchRequest(entityName: "Users")
    request.returnsObjectsAsFaults = false
    if predicate != nil {
        request.predicate = predicate
    }

    if (sortBy != nil){
        var sorter: NSSortDescriptor = NSSortDescriptor(key: sortBy , ascending: isAscending!)
        request.sortDescriptors = [sorter]
    }


    var error: NSError? = nil
    var fetchedResult = myDataModel.managedObjectContext.executeFetchRequest(request, error: &error)
    if !error {
        println("errore: \(error)")
    }


    println("retrieved \(fetchedResult.count) elements for \(entityName)")
    return fetchedResult

}

现在,我在上面写的是语法上正确的,但我相信还有另一种方法可以做到,也许更“容易”。我想这个提议很明确:)
我试图从EntityName输入参数中获取类名
以下面的方式调用此函数或类似的方式调用此函数:
 var xx = myDataModel.retrieve(Users.self)

在哪里?
 Users: NSManagedeObject

你有什么建议吗?

最佳答案

如果像@david指出的那样,将@objc(ModelClassName)添加到模型类中,那么这里有一个简化版本:

func retrieve<T: NSManagedObject>(entityClass:T.Type, sortBy:String? = nil, isAscending:Bool = true, predicate:NSPredicate? = nil) -> T[] {
    let entityName = NSStringFromClass(entityClass)
    let request    = NSFetchRequest(entityName: entityName)

    request.returnsObjectsAsFaults = false
    request.predicate = predicate

    if (sortBy != nil) {
        var sorter = NSSortDescriptor(key:sortBy , ascending:isAscending)
        request.sortDescriptors = [sorter]
    }

    var error: NSError? = nil
    var fetchedResult = myDataModel.managedObjectContext.executeFetchRequest(request, error: &error)
    if !error {
        println("errore: \(error)")
    }

    println("retrieved \(fetchedResult.count) elements for \(entityName)")
    return fetchedResult
}

人们会这样使用它:
@objc(Client)
class Client : NSManagedObject {
    ...
}

retrieve(Client)  // This would get all clients in the database.

关于generics - Swift-泛型提取方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24393837/

10-14 22:05
查看更多