MST
星途 面试题库

面试题:Swift 中观察者模式的基本实现

请用 Swift 代码实现一个简单的观察者模式,要求包含一个被观察对象和至少两个观察者,被观察对象状态改变时能通知到所有观察者。
43.1万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试
// 观察者协议
protocol Observer {
    func update(with state: String)
}

// 被观察对象
class Observable {
    private var observers: [Observer] = []
    private var state: String = ""

    func add(observer: Observer) {
        observers.append(observer)
    }

    func remove(observer: Observer) {
        observers = observers.filter { $0 !== observer }
    }

    func setState(_ newState: String) {
        state = newState
        notifyObservers()
    }

    private func notifyObservers() {
        for observer in observers {
            observer.update(with: state)
        }
    }
}

// 具体观察者1
class ConcreteObserver1: Observer {
    func update(with state: String) {
        print("ConcreteObserver1 收到通知,状态为: \(state)")
    }
}

// 具体观察者2
class ConcreteObserver2: Observer {
    func update(with state: String) {
        print("ConcreteObserver2 收到通知,状态为: \(state)")
    }
}

// 使用示例
let observable = Observable()
let observer1 = ConcreteObserver1()
let observer2 = ConcreteObserver2()

observable.add(observer: observer1)
observable.add(observer: observer2)

observable.setState("新状态")