[英]Define property that must be a subclass AND conform to protocol
在Swift 2.0中,我如何才能完成@property (nonatomic, strong) NSManagedObject*<SomeProtocol> model
?
基本上,我正在尝试在我的类上定义一个属性,它必须都是NSManagedObject
的子NSManagedObject
并且符合SomeProtocol
(我将调用两者定义的方法)。
我看到了这个: https : //stackoverflow.com/a/25826948/363789 ,但我不知道如何将这种语法应用于属性定义...
现在可以使用以下语法在Swift 4中实现:
var myObject: NSManagedObject & SomeProtocol
不幸的是,Swift还不支持这种类型的组合。
作为解决方法的三个合理的好解决方案(第三个可能是最好的):
1.您可以创建具有这些属性的其他类型,并且所有类型都必须从中继承以便用作model
。
class SomeManagedObject: NSManagedObject, SomeProtocol {
// conforming to protocol
func someMethod()
}
// type declaration
var model: SomeManagedObject
解决这个问题的一种更静态的方法是使用泛型:
class Aclass<T: NSManagedObject where T: SomeProtocol > {
var model: T
}
注意:您不必关心必须是超类的其他类型,但此解决方案不像以前那样动态和抽象。
3.您也可以制作自己的协议,并通过扩展使NSManagedObject
符合:
protocol ManagedProtocol {
// if you want to access some methods/properties directly from the type
func method()
var variable: Int { get }
// otherwise call all methods/properties through "managedObject"
// this property also reduces casting if you want to have the object itself
var managedObject: NSManagedObject { get }
}
extension NSManagedObject: ManagedProtocol {
var managedObject: NSManagedObject { return self }
}
现在类型是抽象的,可以写成:
var model: protocol<ManagedProtocol, SomeProtocol>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.