2016-10-17 7 views
0

これが可能かどうかわかりませんが、と思っています。私はこれまでに見ました。スクロールジェネリックの<T>のアクセスプロパティとメソッド

私はアプリケーション全体でフォームオブジェクトに対していくつかの検証を実行しており、これを行うための中心的な再利用可能な方法が必要です。私は、次が出ている:

class RGOValidatedObject<T> { 
    var validationPredicate: ((RGOValidatedObject<T>) -> Bool)? 

    var isValid: Bool { 
     return true 
    } 
} 

私はそれを直接サブクラス化されたかのようにTの値を返すために、むしろRGOValidatedObjectにプロパティを追加するよりも、Tのプロパティとメソッドにアクセスできるようにしたいです次のことを考えてみましょう:

RGOValidatedObject<String>().substringToIndex(1) 

これは私がちょうどT.

が可能です。このサブクラスほとんどかのように、私はRGOValidatedObjectにアクセスTのプロパティとメソッドの意味は何ですか?もしそうなら、私はどうやってそうするのですか?私はSwiftジェネリックスのコンセプトに慣れていませんが、それらの見た目は似ています。

+1

'RGOValidatedObject ().substringToIndex(1)'の結果はどうなりますか? –

+0

配列のインデックスが範囲外の例外を予想しますが、それほど重要な点はありません。コンパイラが 'RGOValidatedObject'の' String'メソッドを認識するのは、もっと大事なことでしょうか? –

+0

'T'型のバリューホルダープロパティを順番に追加する必要があるようです。あなたは 'Optional ' enum構造体に非常によく似たものを受け取ります。おそらく、 'Optional'型実装フォワーディングがあなたの問題にどのように役立つかについての知識でしょう。あなたは素早いソースコードを掘り下げて研究しようとするかもしれません。 –

答えて

1

いいえ、この方法で転送する「リフティング」構文はありません(ただし、今後同様の機能についていくつかの議論があります)。アクセスするにはlet value: Tプロパティを追加する必要があります。

この問題のもう少し一般的なバージョンは、Observable<T>です。あなたはそれをSwiftで完全に透明にすることはできないので、Tのメソッドを(KVOの魔法と同じように)呼び出すことができます。それは明白でなければならない。

+0

ああ、恐れているかもしれません。ご確認、ありがとうございます。 –

関連する問題