0
subscript
から現在のタイプを返す方法があります。サブクラスごとにサブスクリプトが上書きされることはありません。これが私が探しているものです。サブタイプは各サブクラスでオーバーライドする必要があります。
添え字の戻り値としては使用できませんが、多少の解決策がありますので、Self
は使用できません。
例:
class A {
var array = [Int]()
init(array: [Int]) {
self.array = array
}
subscript(condition: (Int) -> Bool) -> A {
get {
return A(array: array.filter(condition))
}
}
}
class B: A {
func aImB() -> Bool {
return true
}
}
let array = [1, 2, 3, 4, 5]
let objB_1 = B(array: array)
let objB_2 = objB_1[{ $0 > 3}]
print(objB_2.dynamicType) // -> will print "A" but I would like to see "B"
objB_2.aImB() // can't be called because objB_2 is of the type A
を:[int]は{取得}'プロトコルにコンパイルするための要件 –
私はこれを使わずに遊び場(Swift 3)で働いています。このプロパティがあることを知るためにプロトコルが必要なのはなぜですか? – sketchyTech
あなたはプロトコル拡張で 'array'プロパティを使っているからです。 (FWIW、私のSwift 3プレイグラウンドもこれについて不平を言う) –