2017-06-22 5 views
2

デリゲートパターンを確実に理解することを学びます。 iOSのコード例の多くは、を含む2つのViewControllersを使用しています。ストーリーボードまたはセグを含まないデリゲートパターン

ViewControllerをデリゲートプロトコルで1つだけ使用し、segueまたはストーリーボードは使用しないようにします。 ViewControllerには、単純なデリゲートメソッドを実行するためのボタンがあります。

ViewControllerクラス:

class ViewController: UIViewController, theDelegate { 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

// It is here I got stuck 
// How do I set delegate = self without out involving segue or the  storyboard at all? Do I need to instantizate the dedecated delegate class and how? 
// To conform to delegate -- theDelegate 
func add(num: Int) { 
    // Output result on ViewController 
} 

func minus(num: Int) { 
    // Output result on ViewController 
} 
} 

専用Delegateクラス:

protocol theDelegate: class { 
func add(num: Int) 
func minus(num: Int) 
} 

class ClassDelegate: NSObject { 
weak var delegate: theDelegate? 

func x() { 
    delegate?.add(num: 100) 
} 
} 

答えて

1

@PhillipMillsからの答えは、あなたがより良いコードの品質を取得するためだけのthisthisから命名規則に関するいくつかのメモを追加するために、正しいはずです。

  • あなたは
  • あなたはKVO
  • にObjCでの作業や使用しているかどうか、にObjCの世界から何かをしたい場合を除きNSObjectのから継承する必要はありません他のすべてのためのタイプ(およびプロトコル)、小文字のために大文字を使用する必要があります
+0

あなたの返事をありがとうございました。 @PhillipMills私はあなたが何を意味しているのかよくわからない、私はデリゲートパターンを適切に使用していないと言っていますか? – Tony

3

あなたのビューコントローラがデリゲートである場合は、あなたのクラスの命名が混乱しています。あなたがClassDelegateと呼ぶものはどんな種類の代議員にもなりませんが、むしろが代理人を使用する「労働者」です。しかし....

var worker = ClassDelegate() 
override func viewDidLoad() { 
    super.viewDidLoad() 
    worker.delegate = self 
    worker.x() 
} 
+0

ありがとうございます。私はそれを逆にしていると思う。クラスは実際のデリゲートクラスであり、私のいわゆるClassDelegateはプロトコルにすぎません。おそらくClassProtocolに名前を変更する必要がありますか?申し訳ありませんが、英語は私の最初の悩みではありません。 – Tony

+0

'ClassDelegate'はプロトコルを使用するため、プロトコルにのみ関連しています。本当に、それが "デリゲート"または "プロトコル"と呼ばれる理由はありません。テーブルビューを考えてみましょう。デリゲートを使用していますが、デリゲートプロトコルに関連した名前は付けていません。 –

+0

私は参照してください。これをクリアする手助けをしてくれてありがとう。 :) – Tony

関連する問題