Reactive cocoa 强制同步函数等待响应式回调

Reactive cocoa forcing a synchronous function to wait for reactive callback

我做了很多研究,但没有得到任何答案。

这是我的代码:

fileprivate var dispose: ScopedDisposable<AnyDisposable>?    

func connectToServer() {
    ...
    let user = ...
    let channelName = getChannelName(user)
    self.connector.connectTo(channelName)
}

func getChannelName(_ user: String) -> String {
    var channelName: String = ""
    self.dispose = ScopedDisposable(
        self.service.requestChannelNameFromServerForUser(user)
        .startWithValues({ results in
            channelName = results[0].channelName
        })
    )
    return channelName // this will return "" because callback hasn't returned yet
}

我正在尝试找到一种方法让函数 "getChannelName" 等待直到 "channelName" 从响应请求(从另一台服务器)中检索到。

感谢您的帮助。

first() function 基本上会为您完成此操作:

func getChannelName(_ user: String) -> String {
    let result = self.service.requestChannelNameFromServerForUser(user).first()
    if let results = result?.value {
        return results[0].channelName
    }
    else {
        // The producer returned no values or an error. Return a default value or throw error or something.
        return ""
    }
}

但更惯用的方法是使 connectToServer 本身成为一个异步 SignalProducer,它将 getChannelNameconnectTo 生产者连接成一个更大的生产者。