为什么这些上下文变量不可见?
Why are these context variables not visible?
我正在使用 Swift 1.2 和 ReactiveCocoa 3.0、SwiftyJSON 2.2.1 和 Alamofire 1.3.1。我正在构建一个响应式网络管理器。
为什么以下不起作用?
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 封口内不可见。最奇怪的事情:这曾经在几个小时前工作过。
哇,经过数小时的搜索,我找到了解决方案。
如果未显式分配给变量,外部闭包似乎不会保留变量(此处:sink 和 disposable)。我用
做了这个
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 1.2 和 ReactiveCocoa 3.0、SwiftyJSON 2.2.1 和 Alamofire 1.3.1。我正在构建一个响应式网络管理器。
为什么以下不起作用?
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 封口内不可见。最奇怪的事情:这曾经在几个小时前工作过。
哇,经过数小时的搜索,我找到了解决方案。
如果未显式分配给变量,外部闭包似乎不会保留变量(此处:sink 和 disposable)。我用
做了这个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 编译器中的错误?