【问题标题】:Alamofire 3.0 ReactiveCocoa ConversionAlamofire 3.0 ReactiveCocoa 转换
【发布时间】:2015-11-17 04:02:11
【问题描述】:

我在将旧的 Alamofire 2.0 转换为 ReactiveCocoa 中的 3.0 时遇到了很多麻烦。我在sendNextsendCompleted 调用中不断收到未知标识符错误。

public final class Network: Networking {
private let queue = dispatch_queue_create( "Beet.BeetModel.Network.Queue", DISPATCH_QUEUE_SERIAL)

public init() { }

public func requestJSON(url: String, parameters: [String : AnyObject]?)
    -> SignalProducer<AnyObject, NetworkError>
{
    return SignalProducer { observer, disposable in
        let serializer = Alamofire.Request.JSONResponseSerializer()
        Alamofire.request(.GET, url, parameters: parameters)
            .response(queue: self.queue, responseSerializer: serializer) {
                _, _, result in
                switch result {
                case .Success(let value):
                    sendNext(observer, value)
                    sendCompleted(observer)
                case .Failure(_, let error):
                    sendError(observer, NetworkError(error: error))
                }
        }
    }
}
}

【问题讨论】:

    标签: swift alamofire reactive-cocoa


    【解决方案1】:

    这个语法changed in 4.0 alpha 2Observer 现在是它自己的类型,所以旧函数 sendNextsendError 等不再是免费函数:

    switch result {
    case .Success(let value):
        observer.sendNext(value)
        observer.sendCompleted()
    case .Failure(_, let error):
        observer.sendError(NetworkError(error: error))
    }
    

    我要添加到您的解决方案中的一件事是提供一次性,以便可以在需要时取消请求,以节省资源:

    return SignalProducer { observer, disposable in
        let serializer = Alamofire.Request.JSONResponseSerializer() 
        let request = Alamofire.request(.GET, url, parameters: parameters)
    
        request.response(queue: self.queue, responseSerializer: serializer) { _, _, result in
            switch result {
            case .Success(let value):
                observer.sendNext(value)
                observer.sendCompleted()
            case .Failure(_, let error):
                observer.sendError(NetworkError(error: error))
            }
        }
    
        disposable.addDisposable(request.cancel)
    }
    

    【讨论】:

      【解决方案2】:

      试试observer.sendNext(value)sendCompletedsendError 也一样

      【讨论】:

        猜你喜欢
        • 2015-10-17
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多