2017-04-20 10 views
1

自分のカスタムプロトコルに準拠したUIViewのタイプが必要です。私はこのようにそれをやろうが、Xcodeはそれが適切な宣言ではないことを言う:プロトコルの問題を伴う迅速なタイプアリア

typealias ViewThatConformsToProtocol = UIView: MyCustomProtocol 

、これはあまりにも動作しません:

typealias ViewThatConformsToProtocol = UIView, MyCustomProtocol 

しかし、私はのためにサブクラスを使用したくありませんそれ。それを行う方法はありますか?

P.S.サブクラスで 私はそれこれたい:

class ViewThatConformsToProtocol: UIView, MyCustomProtocol { 

} 

しかし、私はちょうど私の見解は、こののbehaviouをサポートしていることを知っておく必要がある場合ので、それは例えば(私のデザインパターンに対してだから、私はサブクラス化を使用したくありませんこのビューでViewThatConformsToProtocolをサブクラス化する必要はありません。また、View1はProtocol1とProtocol2に確認できますが、View2はProtocol1とProtocol3に準拠することができます。 Objective-CではUIView *viewForProtocol = (UIView<MyCustomProtocol> *)view1を簡単に宣言することができますが、SWIFTでは不可能と思われるので、私はウォークアラウンドをお探しになります

+0

私はあなたが達成したいものを実際には得られません。 「サブクラスを使用した」場合は、どのように行うのか教えてください。 – Sweeper

+0

@ Sweeper、私はコードとコメントを追加しました。 –

+0

@MaxPevsner、この記事は役に立たなかった –

答えて

0

実際に@ MaxPevsnerの提案は正しかったが正確ではありませんでした。 typealiasはすべての魔法がジェネリックを行うことができるので、使用する必要はありません。

protocol MyCustomProtocol { 
    // ... 
} 

class MyCustomView: UIView, MyCustomProtocol { 

} 

class MyClass<T> where T: MyCustomProtocol { 

    func someFunction<T>(_ value: T) { 
     self.property = value 
    } 
} 

// ... 
let view = MyCustomView() 
let trick = MyClass<MyCustomView>() 
trick.someFunction(view) 

あなたの要件に合っていますか?

+0

実際には、Objective-Cのようにする必要があるため、ここではAnotherCustomProtocolは必要ありません。* viewForProtocol =(UIView *)多くのメソッドでview1(Objective-CコードをSWIFTに変換しています) –

+0

@PaulT更新されたコードスニペット – Astoria

0

タイプアリアスは、特定のタイプのエイリアスです。あなたは、同等のSWIFTコードはたぶん

let viewForProtocol = view1 as? MyCustomProtocol as ? UIView 
+0

いいえ、それは動作しません、あなただけのUIViewを持っています –

+0

あなたは、UIViewまたはMyCustomProtocolへのハンドルを持っていると思います。あなたは両方を持つことはできません – Spads

0
typealias DesiredAlias<T> = T where T:MyCustomProtocol 

//you can assign type like below 
var variableThatConformsToProtocol: DesiredAlias<MyCustomProtocol> 

のその部分になりますが

UIView *viewForProtocol = (UIView<MyCustomProtocol> *)view1 

を掲載しているスニペットコードが与えられた条件

のセットに準拠して何かを求めていますコードが要件を満たしていますか?実際にはMyCustomProtocolに準拠するタイプなので、id<MyCustomProtocol> variableThatConformsToProtocolと似ていますObjective-C

関連する問題