ios – Swift:返回类型为self的数组

我想编写一个函数,它将返回类类型的数组.据我所知,我可以使用“Self”作为 objective-c“instanceType”.我的目标是使用fetchObjects方法为NSManagedobject创建一个扩展.该方法将返回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
    }
}

任何想法我如何定义一个类型的数组?

感谢任何帮助!

解决方法

这是我用于类似功能的jist,请注意,它是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 { ... }

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...