Swift

Swift:クラス間の変数の引き渡し方

representedObjectの再整理です。

追記(12/20/2017):iOSのクラス間での変数受け渡し(共有)の仕方はsingletonを使えばいいです。Swift3でシングルトンを試すが参考になります。modal viewでエラー表示するclassと呼び出し元classでメッセージ等を共有したのですが、比較的に簡単に行きました。macOSではどうすればいいか、時間ができたら再考の余地ありです。

追記(5/15/2015):先のサンプルコード及びこのサンプルコードをベースにすると問題があります。2nd viewのクラスを抜けてしまった後、表示されているEXIFの項目をクリックしてIBActionで編集処理を行おうとしたのですが、main viewのクラスも2nd viewのクラスも変数が初期化され残っていませんでした。後程、正しく動作するものをアップします。

何はともあれ、こうすればクラス間でviewを切り替え、変数引き渡しができます。

  1. view間(クラス間)のデータの受け渡しは、サブクラスからの直接参照はNGで、representedObjectを使う必要がある。
  2. 受け渡す変数(この場合はxbParm)は、Referencing Outletsで自分のviewであるmesaGPS Windowと接続する。
  3. Action buttonは、action-modalでmesaEditPhoto Windowと接続する(storyboard参照)。
  4. ふたつ目のviewにObjectを追加したい場合(この例ではmesaEditPhotoを追加済み)、 required init?(coder: (NSCoder!))を入れると異常終了になるので、このコードは入れない。
  5. ふたつ目のviewを特定事象と連動してプログラムで起動したい場合、xbPushButton?.performClick(self)で実現できる。
    これはたとえばサムネール一覧の中の特定サムネールがクリックされたとき、ふたつ目のviewを起動させたいときに使える。
  6. overrideはこのサンプルにあるものを使う。
  7. prepareForSegueでサブクラスの定義とrepresentedObjectで引き渡す変数のxbParmの定義を行う。
  8. ふたつ目のviewは、self.dismissController(self)でwindowを閉じる。

これで、2つのwindowの制御ができるようになったので、これからは機能の作り込みに専念できます。

Categories: Swift, 技術