2017-08-15 10 views
0

FirstViewControllerからSecondViewControllerにデータを送信するには、prepareForSegue()メソッドを使用します。 ただし、これはoverrideメソッドです。つまり、FirstViewControllerクラスはUIViewControllerクラスからこのメソッドを継承します。prepareForSegue()メソッド

UIViewControllerクラスのこのメソッドのタスクは何ですか?

バージョンでsuper.prepareForResult()メソッドを呼び出さないのはなぜですか?この方法の

+4

[このメソッドのデフォルト実装は何もしない](https://developer.apple.com/documentation/uikit/uiviewcontrollerを/ 16 21490-prepareforsegue)。 –

答えて

1

アップルのドキュメントから、デフォルトの実装は何もしません。

だから、スーパークラスの実装が

super.prepareForReuse() 

のようなものやメソッドをオーバーライドする必要はありませんが、実際にはテンプレートメソッドパターンのようなものではないことを意味しません。 「私たちに電話して、電話しない」。 UIViewControllerクラスは、必要なときにこのメソッドを呼び出し、サブクラスはそれをオーバーライドして実装を追加します。

+0

説明ありがとうございました:) – Goktug

-2

私はprepareForSegueを使用していましたが、それはあまりにも多くの問題であることを認識しました。代わりに、ちょうどはあなたがそうのように、をインポートする場所の下/上に直接送ってみたかったあなたの変数を作成します。

import UIKit 

var myVariable = "Hello" 

class ViewController: UIViewController{... 

次に変数はセグエを使用することなく、任意のビューコントローラからアクセスになります。

したがって、たとえば、ボタンアクション(同じビューコントローラはのは、言わせて)に私が言うことがあります。

myVariable = "Goodbye" 

その後、私は私の他のビューコントローラに入る、とのviewDidLoadまたはどこ希望にすることができます変数にアクセスするには、あなたは、変数を編集したり、何でも、たとえば行うことができます。

viewDidLoad{ 
print(myVariable) 
// Goodbye 
} 
+2

これはひどいアドバイスです。グローバル変数を介してデータを渡すべきではありません。 – idz

+0

@ idzそれは動作する解決策であることを除いて。だから私は恐ろしいアドバイスと呼ぶことはありません。ありがとうございます。 –

+0

これの主な問題は、変数を誰にでも見せることです。誰もがそれにアクセスして変更することができます。大量のグローバル変数を設定する場合は、誰かがグローバル変数を変更して誰かがそれを知ることができない場合が多いので、これをデバッグするのは恐ろしいことです。 – iamirzhan