generics - Swift - 使用泛型获取方法

标签 generics core-data swift

想法是使用 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) 添加到您的 Model 类中,这是一个简化版本:

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/

相关文章:

ios - 如何防止备份带有外部文件的 Core Data 数据库?

iphone - 排序核心数据获取结果

Swift - 调度队列和串行运行的 U/I

c - 在 Swift 模块中使用 C 库的链接器架构错误

ios - 如何从另一个类中快速更新 label.text 的值

java - 通用类型和性能

ios - 使用核心数据的最佳实践

java - C# 相当于 java Class<E> 和 E extends Enum<E>

c# - c# 中的类(使用 filehelpers)- 可空字符串在其他可空类型不存在时给出错误

generics - 使用类型级计算时类型推断/类型检查失败