mercredi 14 mars 2018

How to implement listener pattern in swift

I am new in swift moved from java. And some implementaion of dessign patterns confuse me.

For example I have presudo pattern observer (callback) in java code (there is example below). Namely UI passed own listener to Manager class and listen callbacks isConnected and isDisconnected. If a callback is executed UI class shows certain message "isConnected" or "isDisconnected"

    public class UI{
        private Manager mManager;
        void createManager(){
            mManager = new Manager(mManagerLister);
        }
        public void showMessage(String aMsg){
            print(aMsg)
        }
        private final IManagerListener mManagerLister = new IManagerListener{
            void isConnected(){
                this.showMessage("isConnected") 
            }
            void isDisconnected(){
                this.showMessage("isConnected")
            }
        }
    }

    public class Manager{
        interface IManagerListener{
            void isConnected();
            void isDisconnected();
        }
        private final mListener; 
        public Manager(IManagerListener aListener){
            mListener = aListener;
        }
    }

How to correctly port this java code to swift code? I tries to port but error message Value of type 'UI' has no member 'showMessage' is shown

  public class UI{
    var manager: Manager?
    var managerListener: IManagerListener?
    func createManager(){
        managerListener = ManagerListenerImp(self)  
        manager = Manager(managerListener)
    }
    public func showMessage(msg: String){
        print(msg)
    }
    class ManagerListenerImp: IManagerListener{
        weak var parent: UI 
        init(parent : UI ){
            self.parent = parent
        }
        func isConnected(){
            parent.showMessage("isConnected") 
            // Value of type 'UI' has no member 'showMessage'
            }
        ..........
    } 
} 

Perhaps exists more gracefully a way to use callbacks and my way is not correctly?

Aucun commentaire:

Enregistrer un commentaire