我不明白的問題,因爲這段代碼看起來好像沒什麼問題:
class Foo {
var str = "hi";
func refresh() {
println(self.str);
}
}
class Bar: Foo {
override init() {
super.init()
str = "bar"
let zed = Zed(parent: self)
}
}
class Baz: Foo {
override init() {
super.init()
str = "baz"
let zed = Zed(parent: self)
}
}
class Zed {
var parent: Foo?; // I want it to work for both Bar and Baz
init(parent: Foo) {
self.parent = parent
self.parent?.refresh()
}
}
let b = Bar() // prints bar
let c = Baz() // prints baz
如果問題是如何確保美孚的沒有其他子類允許爲捷思銳的父母:有沒有辦法來指定斯威夫特的類型約束的「或」約束,但你可以通過在酒吧和巴茲相同的協議,並指定該協議爲parent
的類型:
protocol CanRefresh
{
func refresh()
}
extension Bar : CanRefresh
{
}
extension Baz : CanRefresh
{
}
class Zed {
var parent: CanRefresh?; // I want it to work for both Bar and Baz
init(parent: CanRefresh) {
self.parent = parent
self.parent?.refresh()
}
}
這樣ÿ您可以明確列出Zed支持的類(但這是一個非常糟糕的API設計;您應該發佈協議,並讓任何願意遵守該協議的人遵守)。
所以你想訪問Bar和Baz類的'parent'? – Padarom 2014-12-03 07:56:59
'parent'應該是'Bar'或'Baz'類。 – switz 2014-12-03 07:59:12
那什麼不起作用?這對我來說看起來很好...... – Grimxn 2014-12-03 08:15:23