ios - Swift:返回 self 类型的数组

标签 ios arrays types swift

我想写一个类函数,它会返回一个类类型的数组。据我所知,我可以将 Self 用于 objective-c instanceType。我的目标是使用 fetchObjects 方法为 NSManagedObject 创建一个 extension。此方法将返回 NSManagedObject 子类的数组。这是我的伪代码的一个示例,它无法编译:

extension NSManagedObject {

    class func fetchObjects(entity: String, context: NSManagedObjectContext, predicate: NSPredicate?, sortDescriptors: NSSortDescriptor[]?) -> Self[] {
        // can't define return type of an array with type Self
        // also var declaration does not work
        var objects : Self[]?

        return objects
    }
}

知道如何定义一个 Self 类型的数组吗?

感谢您的帮助!

最佳答案

这是我用于类似功能的要点,注意它是 NSManagedObjectContext 而不是 NSManagedObject 的扩展。类似的事情可能会在 NSManagedObject

上完成
protocol NamedManagedObject {

    class func entityName() -> String;

}

extension NSManagedObjectContext {

    func fetchObjects<T:NSManagedObject where T:NamedManagedObject>(entity:T.Type, predicate:NSPredicate? = nil, sortDescriptors:NSSortDescriptor[]? = nil) -> T[]? {
        let request = NSFetchRequest(entityName: entity.entityName())

        request.predicate = predicate
        request.sortDescriptors = sortDescriptors

        var error:NSError? = nil
        let results = self.executeFetchRequest(request, error: &error) as? T[]

        assert(error == nil)

        return results
    }

}

extension MyObjectClass : NamedManagedObject {
    class func entityName() -> String {
        return "MyObjectClass"
    }
}

然后使用它很简单:

let objects = managedObjectContext.fetchObjects(MyObjectClass)

请注意,您还可以为所有 NSManagedObjects 实现 NamedManagedObject:

extension NSManagedObject : NamedManagedObject {
    class func entityName() -> String {
        return NSStringFromClass(self)
    }
}

如果您还确保所有类都明确指定了 Objective-C 友好名称:

@objc(MyManagedObject)
class MyManagedObject : NSManagedObject { ... }

关于ios - Swift:返回 self 类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24537238/

相关文章:

ios - 如何在 Macbook 中的 iPhone 6s 模拟器上找到 SQLite 数据库?

ios - 应用程序在后台 iOS 时的 Firebase 数据库事务

ios - UITableview 默认单元格中的自定义分隔符显示意外行为

arrays - 如何找到数组中最小的数字

javascript - 按字段对对象数组进行排序,然后按字母顺序排序

函数类型的 Scala 类型推断

typescript - TypeScript 中的类型化枚举实例

c++ - 返回类型 '?:'(三元条件运算符)

ios - EKEventStore requestAccess() 无法在 iOS 9 中显示用户提示

java - 获取学生评分测试成绩的平均值