2017-08-01 14 views
0

私は、カメラを使用してアプリを作成するためにapple AVFoundationパッケージに入っています。私のコードでは、アップルのCameraViewControllerと実際のビューを制御するCameraVCと通信するためにかなりの量の公開変数を使用しています。たとえば:2つのViewControllersの間で話すためのパブリック変数の過度使用

public var _photoButton: UIButton! 

public var _imageTaken: UIImageView! 

public var _sendBtn: UIButton! 

public var _dismissBtn: UIButton! 

public var _videoDismissBtn: UIButton! 

public var _videoSendBtn: UIButton! 

public var photoData: Dictionary<String, Data>! 

私は私の他のViewControllerに上の画像/ビデオデータを渡すためにaswellとして、私は特別なタスクを実行する私のUI上で持っているボタンで接続するためにこれらの変数を使用しています。 (現在の画像/ビデオを閉じる、現在の画像/ビデオをサーバに送る)。私は自分のベストプラクティスを使うようにしていますが、もっと良い解決策は考えられませんでした。これらのパブリック変数を使用すると、私のアプリのパフォーマンスにどのような影響がありますか?可能であれば、どうすればよいでしょうか?

例:CameraVC(ないリンゴのCameraViewController)

@IBAction func sendBtnPressed(_ sender: Any) { 
    performSegue(withIdentifier: "FriendsVC", sender: ["snapshotData": photoData.removeValue(forKey: "photoData")]) 
    self.view.insertSubview(previewView, aboveSubview: imageTaken) 
    self.sendBtn.isHidden = true 
    self.sendBtn.isEnabled = false 
    self.dismissBtn.isEnabled = false 
    self.dismissBtn.isHidden = true 
} 

    @IBAction func dismissBtnPressed(_ sender: Any) { 
    self.view.insertSubview(previewView, aboveSubview: imageTaken) 
    self.sendBtn.isHidden = true 
    self.sendBtn.isEnabled = false 
    self.dismissBtn.isEnabled = false 
    self.dismissBtn.isHidden = true 
    self.photoData = nil 
    return 
} 
+0

これらの変数を渡そうとしているところにコードを追加してください。実際にはこれらは秘密に保つことができます。ラッパーメソッドは、それらを変更するために提供することができます。 –

+0

確かに、ここに例があります – Chris

答えて

0

これらのプロパティは、公共のパフォーマンスには影響しませんしているという事実。メソッド内では、publicの代わりにprivateを設定すると、この方法でコンパイラがこのメソッドがfinalであることが確認できます。

パフォーマンスのもう1つのポイント - サーバーにデータを送信する場合、前述したように、まだ実行していない場合は非同期バックグラウンドキュー(GCD)で行うことを強くお勧めします。

他の方法を実装する場合 - 全体像を見る必要があります。私がここに見ているものから、あなたはディージェイからバグとエンベロイル/ディセーブル・ボタンを使って価値を送りますが、それには何も問題はありません。あなたがメインスレッド上の画像/ビデオデータの大部分をサーバーに複製/送信しない限り、それは問題ありません。

最後のヒント - 必ずperformSegueは必要ありません - データを次のViewControllerに渡して呼び出したい場合は、ナビゲーションコントローラを使用できます(最初のView Controllerはナビゲーションコントローラに組み込む必要があります) )何かのように:

if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NextViewController") as? NextViewController{ 
if let navigator = self.navigationController{ 
    vc.someProperty = someDataToPass 

    navigator.pushViewController(vc, animated: true)}} 
+0

レスポンスありがとう、私はモデルでデータを解析していますので、firebase storageに行きます。返信いただきありがとうございます。ナビゲーションコントローラで再生して動作を確認します – Chris

関連する問題