2016-12-09 9 views
1

プロトコルが、クラスがスーパークラスを持つクラス&に対してのみ使用されるように指定するプロトコルまたはプロトコル拡張を実装することは可能ですか?自己がサブクラスであるSwiftプロトコル拡張

もしそうなら、私はこれを利用して、クラスのスーパークラスを反復して、それぞれが共通の変数を格納しているすべてのデータを集めることができますか?

つまり、次の例では、最後にallVals = ["core", "middle", "top"]というように2番目のBaseType拡張擬似コードが実行しようとしている拡張機能を作成することは可能ですか?

import Foundation 

protocol BaseType: class { 
    var data: [String] { get } 
    var all: [String] { get } 
} 

extension BaseType { 
    var all: [String] { 
    return data 
    } 
} 

// Is the intent of this extension realistic? 
extension BaseType where Self.super is BaseType { 
    var all: [String] { 
    return data + super.all 
    } 
} 

class CoreDT: BaseType { 
    var core: String = "core" 
    var data: [String] { return [core] } 
} 


class MiddleDT: CoreDT { 
    var middle: String = "middle" 
    override var data: [String] { return [middle] } 
} 

class TopDT: MiddleDT { 
    var top: String = "top" 
    override var data: [String] { return [top] } 
} 

let allVals = TopDT().all 

print(allVals) 

答えて

1

The simple answer is:
あなたはこれを達成することはできません。

The detailed one:
あなたはそれの上にNSObjectProtocolを実装することにより、プロトコル内のスーパークラスと連携する機能を実現することができます。しかし、Objective CからSwiftへのブリッジ機能の問題が現れます。このソリューションはプロトコルに@objcプロトコルを適用しますが、デフォルトの実装ではプロトコルを拡張することはできません。

関連する問題