2017-05-03 11 views
0

私は迅速な開発で新しいです。解決すべき状況を理解するのを助けてください。Swift 3のグローバルクラスからUIViewControllerのコンポーネントを更新するには?

グローバルクラスからUIViewControllerを更新したいとします。グローバルクラスでコールバック関数を使用したので、集中管理が必要です。

class Global { 

    static let global = Global() 

    static func listener(msg:String) { 
     if(topView = viewA) 
      I want to update label of viewA 
     else 
      I want to update label of viewB 
    } 
} 

//This class is current view controller 
class viewA:UIViewController { 
* has label 
* has button 
} 

class viewB:UIViewController { 
* has label2 
* has button 
} 

次のソリューションを使用しますが、それは誤りに

if(topView = viewA) 
      topView.label = msg; <- Error! Value of type UIVIEW has no member 
     else 
      topView.label2 = msg; <- Error! Value of type UIVIEW has no member 
+1

通知センターを使用して通知を送信できます。変更を加えたいすべてのクラスにオブザーバーを追加する必要があります。 – Priyal

+0

はい@Priyalが正しいです。ここでNotifiactionCenterとObserverを使うことができます。 –

答えて

1

を与える本格的な方法は、あなたが持っている<- Error! Value of type UIVIEW has no member受信者にメッセージを送信するためにNSNotificationまたはDelegatesのいずれかを使用することですが、この時点では、このエラーを削除する場合ビューを特定のタイプのビューにキャストして、そのビュー内のラベルにアクセスします。

は、例えば、

if(topView = viewA) 
    (topView as! viewA).label.text = msg; <- Error! Value of type UIVIEW has no member 

注意は、このタイプは、上記の例では、(topView as! viewA)キャスト。

NSNotificationアプローチを使用すると、一度に複数のオブザーバーに同じメッセージを送信できます。毎回キャストを入力する必要はありません。

関連する問題