Anonymous class in swift

后端 未结 5 1377
被撕碎了的回忆
被撕碎了的回忆 2020-12-10 00:30

Is there an equivalent syntax or technique for Anonymous class in Swift? Just for clarification Anonymous class in Java example here - http://docs.oracle.com/javase/tutorial

5条回答
  •  Happy的楠姐
    2020-12-10 01:22

    This is what I ended up doing (Observer pattern). You can use closures in a similar way you would use anonymous classes in Java. With obvious limitations of course.

    class Subject {
       // array of closures
       var observers: [() -> Void] = []
    
       // @escaping says the closure will be called after the method returns
       func register(observer: @escaping () -> Void) {
           observers.append(observer)
       }
    
       func triggerEvent() {
           observers.forEach { observer in
                observer()
           }
       }
    }
    
    var subj = Subject()
    // you can use a trailing closure
    subj.register() {
        print("observerd")
    }
    
    // or you can assign a closure to a variable so you can maybe use the reference to removeObserver() if you choose to implement that method
    var namedObserver: () -> Void = {
        print("named observer")
    }
    subj.register(observer: namedObserver)
    
    subj.triggerEvent()
    // output:
    // observerd
    // named observer
    

提交回复
热议问题