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

前端之家收集整理的这篇文章主要介绍了ios – Swift:返回类型为self的数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想编写一个类函数,它将返回类类型的数组.据我所知,我可以使用“Self”作为 objective-c“instanceType”.我的目标是使用fetchObjects方法为NSManagedObject创建一个扩展.该方法将返回NSManagedObject子类的数组.这是我的伪代码的一个例子,它不编译:
  1. extension NSManagedObject {
  2.  
  3. class func fetchObjects(entity: String,context: NSManagedObjectContext,predicate: NSPredicate?,sortDescriptors: NSSortDescriptor[]?) -> Self[] {
  4. // can't define return type of an array with type Self
  5. // also var declaration does not work
  6. var objects : Self[]?
  7.  
  8. return objects
  9. }
  10. }

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

感谢任何帮助!

解决方法

这是我用于类似功能的jist,请注意,它是NSManagedObjectContext而不是NSManagedObject的扩展.类似的东西可能在NSManagedObject上完成
  1. protocol NamedManagedObject {
  2.  
  3. class func entityName() -> String;
  4.  
  5. }
  6.  
  7. extension NSManagedObjectContext {
  8.  
  9. func fetchObjects<T:NSManagedObject where T:NamedManagedObject>(entity:T.Type,predicate:NSPredicate? = nil,sortDescriptors:NSSortDescriptor[]? = nil) -> T[]? {
  10. let request = NSFetchRequest(entityName: entity.entityName())
  11.  
  12. request.predicate = predicate
  13. request.sortDescriptors = sortDescriptors
  14.  
  15. var error:NSError? = nil
  16. let results = self.executeFetchRequest(request,error: &error) as? T[]
  17.  
  18. assert(error == nil)
  19.  
  20. return results
  21. }
  22.  
  23. }
  24.  
  25. extension MyObjectClass : NamedManagedObject {
  26. class func entityName() -> String {
  27. return "MyObjectClass"
  28. }
  29. }

然后使用它就像:

  1. let objects = managedObjectContext.fetchObjects(MyObjectClass)

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

  1. extension NSManagedObject : NamedManagedObject {
  2. class func entityName() -> String {
  3. return NSStringFromClass(self)
  4. }
  5. }

如果你也确保所有的类都明确地给出了Objective-C友好的名字:

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

猜你在找的iOS相关文章