不幸的是斯威夫特不支持這種類型的成分呢。
三個合理良好的解決方案,解決方法(第三個可能是最好的):
1. 可以使其他類型的用了這些屬性和必須繼承它爲了所有類型用作model
。
class SomeManagedObject: NSManagedObject, SomeProtocol {
// conforming to protocol
func someMethod()
}
// type declaration
var model: SomeManagedObject
2. 解決這個問題的一種更靜態的方法是使用泛型:
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>
對不起,但我不認爲你在Objective-C中的財產聲明是合法的。我發現它只適用於'id' –
JeremyP
嗯,你可能是對的。我想這就是爲什麼有一個NSObject協議。我想知道Swift是否可以簡單地爲每個類自動生成伴隨協議? – elsurudo
如果這是真的,它有點糟糕,因爲它會導致一些煩人的投射是必要的 – elsurudo