【问题标题】:Why are these context variables not visible?为什么这些上下文变量不可见?
【发布时间】:2015-12-14 10:04:25
【问题描述】:

我正在使用带有 ReactiveCocoa 3.0、SwiftyJSON 2.2.1 和 Alamofire 1.3.1 的 Swift 1.2。我正在构建一个反应式网络管理器。

为什么以下不起作用?

func sendRequest(request: ApiRequest) -> SignalProducer<JSON, NSError> {

    return SignalProducer { sink, disposable in
        alamofireManager.request(request.method, request.url, parameters:request.parameters, encoding: .JSON).responseJSON
            { (request, response, data, error) in
                if let error = error {
                    // sendError(sink, error)
                } else {
                    NSLog("Successful network request")
                    // sendNext(observer, JSON(data!))
                    // sendCompleted(sink)
                }
        }
    }
}

sendError、sendNext 和 sendCompleted 未编译。当它们被取消注释时,编译器会说:

Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1

调试时,我看到水槽和一次性用品在 Alamofire 封闭件内不可见。最奇怪的是:这曾经在几个小时前起作用。

【问题讨论】:

    标签: swift closures alamofire reactive-cocoa-3


    【解决方案1】:

    哇,经过数小时的搜索,我找到了解决方案。

    如果没有明确分配给变量,外部闭包似乎不会持久化变量(这里:sink 和一次性)。我这样做了

    let sink = sink
    

    以下作品:

    func sendRequest(request: ApiRequest) -> SignalProducer<JSON, NSError> {
        return SignalProducer { sink, disposable in
            let sink = sink
    
            self.alamofireManager.request(request.method, request.url, parameters:request.parameters, encoding: .JSON).responseJSON
                { (request, response, data, error) in
                    if let error = error {
                        sendError(sink, error)
                    } else {
                        sendNext(sink, JSON(data!))
                        sendCompleted(sink)
                    }
            }
        }
    }
    

    也许有人可以更笼统地解释一下吗?我认为带有参数的外部闭包将在内部闭包中自动可用。这可能是 swift 编译器中的错误吗?

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      相关资源
      最近更新 更多