我正在处理Swift中的泛型。我有一个扩展到
Xcode的提示是:“在函数签名中未使用泛型参数'Self'”。
NSManagedObject
类的内容,并希望创建一个仅适用于实现我定义的某个协议的类的初始化程序。现在我有了下面这样的东西,但它不起作用,甚至无法编译。你能帮我让它工作吗?public extension NSManagedObject {
public convenience init<Self: Nameable>(context: NSManagedObjectContext) {
let entity = NSEntityDescription.entityForName(Self.entityName(), inManagedObjectContext: context)!
self.init(entity: entity, insertIntoManagedObjectContext: context)
}
}
public protocol Nameable {
static func entityName() -> String
}
Xcode的提示是:“在函数签名中未使用泛型参数'Self'”。
NSManagedObject
子类,想让它们能够调用let obj = MyClass(context: context)
,但前提是它们必须实现Nameable
。我发现这个声明是错误的,应该更像这样:extension NSManagedObject where NSManagedObject: Nameable
,但这种方式也不起作用。 - Tomasz Szulclet obj = MyClass(context:context)
!这在任何语言中都没有意义。如果有一个初始化程序MyClass(context:context)
,_任何人_都可以调用它(如果他们能看到它)。这就是面向对象编程的本质,如果你明白我的意思的话。我也看不出为什么你会想这样做。 - matt