Swift:返回 self 类型的数组
Posted
技术标签:
【中文标题】Swift:返回 self 类型的数组【英文标题】:Swift: return Array of type self 【发布时间】:2014-08-23 14:32:02 【问题描述】:我想写一个类函数,它会返回一个类类型的数组。据我了解,我可以将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 类型的数组吗?
感谢您的帮助!
【问题讨论】:
你可以像这样参数化函数:class fund fetchObjects<Self>(...) -> Self[]?
但我认为你不能泛化从 ObjC 到 Swift 的桥接,这样编译器就可以保证对于每个 NSManagedObject 都会有对应的 Swift 对象。不过那会很棒,很好的问题。
为了清楚起见,您不是在寻找“子类”数组,而是在寻找类型为已命名超类的子类的实例数组?
是的,这就是我想要实现的,所以如果我在 NSManagedObject 子类上调用它,它将返回该子类的实例数组
但是如果我声明 这是我用于类似功能的要点,注意它是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 ...
【讨论】:
太棒了! “.Type”的东西也是我所寻找的。实际上想和你一样先;)以上是关于Swift:返回 self 类型的数组的主要内容,如果未能解决你的问题,请参考以下文章
在for循环中将PFFile数组转换为UIImage返回空数组Swift