2017-05-19 32 views
0

私はSwift 3とObjective-Cに関する独自のパラダイム構造を学ぶ過程にあり、私は何を作るのかわからないデザインパターンに遭遇しましたでる。私は直接質問をレイアウトしてみましょう。クラス内でプロトコルを実装するクラスを拡張する

以前のObjective-Cでは、クラス自体にプロトコル/デリゲートを実装できます。私はこれに非常に似ているスウィフト同等物があることがわかります。

例:

class myClass : UIViewController , UITextFieldDelegate { 
    // somewhere inside the class we implement the delegate of 
    // UITextfieldDelegate, something like this 

     func doSomething(){ 
      theTextField.delegate = self 
     } 

     func textFieldDidEndEditing(_ textField: UITextField) { 
      // works just fine 
     } 

} 

さて、これは我々がObjective-Cでそれをやった正確にどのようにあります。しかし今、私はクラスでプロトコル/デリゲートを実装する別の方法を得ています。

class MyClass : UIViewController , UITextFieldDelegate { 

    func doSomething(){ 
     theTextField.delegate = self 
    } 

} 

extension MyClass : UITextFieldDelegate{ 
     func textFieldDidEndEditing(_ textField: UITextField) { 
      //Even this works fine 
    } 
} 

今私は困惑しています。これは委任パターンを実装するもう1つの方法ですか、それともこれ以上のことがありますか?これは単なる設計パラダイムですか、それとも他の目的もありますか?

+0

これはまともな関連記事です:https://www.natashatherobot.com/using-swift-extensions/ – DonMag

+0

大文字で始まるクラスに名前を付けるのは迅速です。ところで 'EQHomeViewController'を' MyClass'の代わりに に拡張しています –

+0

@LeoDabus私の悪いですが、タイプミスを無視してください。私はそれらを編集した –

答えて

0

客観的な回答は:

2つの間に違いはありません。

主観的回答は:

コード構成のスタイルによって異なります。一部の人々は、実際に適合ロジックに属するコードを分離するため、拡張機能を使用してプロトコルに準拠するように「クリーナー」と考えている人もいます。

例えば、単一のクラスはデリゲートとデータソース(UITableViews用)を実装する必要がありますが、他のカスタムクラスにも準拠する可能性があります。また、拡張を使用すると、どのプロトコルがどのプロトコルに適合するのかがはっきり分かります。

#PRAGMA Markを使用するだけでObjective-Cの問題はあまりありませんでした。コードをきれいに整理できました。 Swiftにはこのようなことはないので、拡張機能を使ってコードを分割する人もいます。 (Natashaの記事ではコメントにリンクしています)。

ただし、拡張機能を使用してプロトコルの準拠を実装することをお勧めします。 (ロジックの残りの部分からの明確な分離があるので)


また、プロトコルを使用しておよそ1つの余分な利点がありますし、そのあなたが実際にクラスへの適合性を追加することができますが、通常は(へのアクセスを持っていませんあなたによって作られていないもの)。

私はこのことを明確に説明しているので、迅速なドキュメントをお勧めします。

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html#//apple_ref/doc/uid/TP40014097-CH24-ID151

あなたが欲しいすべてのクラスでそれを実装する必要がないように、そのプロトコルに「デフォルト」の動作を提供するために使用されるプロトコル自体は、拡張された非常に興味深いものであるもう一つの特殊なケースそれに準拠する。

関連する問題