相关疑难解决方法(0)

如何使用异步回调进行同步操作?

如何使用异步函数进行同步操作?

class MyClass {
    static let shared = MyClass()
    let operationQueue = OperationQueue()
    let dispatchGroup  = DispatchGroup()

    func request(_ myRequestURL: URL) {
        operationQueue.addOperation {
            self.dispatchGroup.enter()
            // Async function
            Alamofire.request(myRequestURL).response { response in
                print(response.request)
                self.dispatchGroup.leave()
            }

            self.dispatchGroup.wait(timeout: .distantFuture)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MyClass.shared.request(A)
MyClass.shared.request(B)
MyClass.shared.request(C)

输出:C> A> B
预期:A> B> C


我知道有一个完成块方法可以这样做.但请求将嵌套.

func request(_ myRequestURL: URL, completion: @escaping (_ data: Data?) -> Void) {
    // Async function
    Alamofire.request(myRequestURL).response { response in
        completion(response.data)
    }
}
Run Code Online (Sandbox Code Playgroud)

MyClass.shared.request(A){_ in
     MyClass.shared.request(B){_ in
         MyClass.shared.request(C){_ in …

ios swift

5
推荐指数
1
解决办法
2730
查看次数

如何执行一个接一个完成的多个 Alamofire 请求?

我想执行多个 Alamofire 请求。但是,由于数据依赖性,新请求应仅在前一个请求完成时开始。

我已经用更一般的异步请求示例提出了一个问题,该示例使用OperationQueue. 但是,我没有成功地使用 Alamofire 实现相同的目标。

public func performAlamofireRequest(_ number: Int, success: @escaping (Int) -> Void)->Void {
    Alamofire.request(String(format: "http://jsonplaceholder.typicode.com/posts/%i", number+1)) // NSURLSession dispatch queue
        .responseString { response in // Completion handler at main dispatch queue? 
            if response.result.isSuccess {
             //   print("data")
            } else if response.result.isFailure {
             //   print("error")
            }
            success(number) // Always leave closure in this example
    }
}
Run Code Online (Sandbox Code Playgroud)

为了确保在下一个请求开始之前完成请求,我使用OperationQueue如下:

let operationQueue = OperationQueue.main
for operationNumber in 0..<4 { // Create some operations
    let …
Run Code Online (Sandbox Code Playgroud)

nsoperationqueue swift alamofire

1
推荐指数
1
解决办法
1943
查看次数

如何使用Alamofire执行顺序请求并在Swift 3的每一步更新progressHUD

好的,我对这一个感到疯狂......

我正在使用Alamofire 4.x(Swift 3和XCode 8.1).我需要从需要身份验证的站点获取和解析几个html请求(不幸的是没有json API).然后用Fuzi解析HTML,这个进展可能需要一些时间,所以我打算使用ProgressHUD(准确地说PKHUD)让用户知道发生了什么.我还需要获取一些不在身份验证后面的html.

我创建了一个结构和函数来处理整个网络进程并解析数据.

我设法执行请求并获取我需要的数据,但我似乎无法弄清楚如何在正确的时间进行HUD更新.

到目前为止,这是我的代码:

import Alamofire
import Fuzi
import PKHUD

struct MyMSCProvider {

static let baseUrl = "http://mastersswimming.ca"

//I tried with or without a custom queue - same result
static let processingQueue = DispatchQueue(label: "com.colddiver.processing-queue", qos: .utility)

static func fetchData(data: MscRequest) {

    if data.profile || data.log {

        //Authenticate first!
        HUD.show(.labeledProgress(title: "Authenticating", subtitle: ""))

        let requestUrl = "\(baseUrl)/MyMscPage.jsp"
        let parameters = ["locale": "en", "username": data.user.username, "password": data.user.password]

        Alamofire.request(requestUrl, method: .post, parameters: parameters).responseData(
            queue: processingQueue,
            completionHandler:
            { …
Run Code Online (Sandbox Code Playgroud)

grand-central-dispatch alamofire swift3 xcode8.1

0
推荐指数
1
解决办法
1587
查看次数