gpt4 book ai didi

swift - 为什么这些上下文变量不可见?

转载 作者:行者123 更新时间:2023-11-30 14:03:59 25 4
gpt4 key购买 nike

我正在使用 Swift 1.2 和 ReactiveCocoa 3.0、SwiftyJSON 2.2.1 和 Alamofire 1.3.1。我正在构建一个响应式(Reactive)网络管理器。

为什么以下内容不起作用?

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 封闭件内看不到水槽和一次性用品。最奇怪的事情:几个小时前这曾经起作用。

最佳答案

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

如果没有显式分配给变量,外部闭包似乎不会保留变量(此处:接收器和一次性)。我用的是这样做的

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 编译器中的一个错误吗?

关于swift - 为什么这些上下文变量不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32631972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com