2017-07-16 133 views
-1

我正在使用位于here的异步库。我的代码如下:在运行第二次之前等待代码块Swift

let backgroundBlock = Async.utility { 
     for serial in serialarray 
     { 
     self.getVersion(serial: serial) 
     } 
    } 



backgroundBlock.main { 
      print(serialarray) 
      print(versionarray) 
      SwiftSpinner.hide() 
    } 

如果我没有理解这一权利,getVersion应该在后台运行,直到它完全完成后,将第二块应该运行并打印出我的两个阵列。取而代之的是第一个数组被打印出来,但第二个数组是空白的。我在我的getVersion函数中添加了一个print,看看它是否工作正常,我可以看到所有的值都被填充,所以看起来第一个块在打印数组之前没有等待完成。难道我做错了什么?

编辑:

对于一些附加的清楚起见,上面的代码以简单alamofire请求的完成处理程序执行。并且getVersion函数如下:

Alamofire.request("url=\(serial)", headers: httpheader).validate().responseData { response in 

     switch response.result { 

     case .success: 

      if let data = response.data { 

       let xml = SWXMLHash.parse(data) 

       var count: Int = 0 

       var stop = false 

       for elem in xml["deviceSoftwares"]["deviceSw"].all 

       { 

        for elem2 in elem["swAttrs"].all 

        { 


         if stop == false 

         { 
          count += 1 

         if (elem2["value"].element!.text) == "com.fiberlink.maas360.fpl" 
         { 
          stop = true 
         } 

         } 

        } 
       } 


       let position = (count/5) 


       SwiftSpinner.hide() 

       if stop == true 

       { 
       let version = xml["deviceSoftwares"]["deviceSw"][position]["swAttrs"][2]["value"].element!.text 

        versionarray.append(version) 
       } 

       else 

       { 
        versionarray.append("N/A") 


       } 

       print (versionarray) 

      } 

     case .failure(_): 

      let errorCode = response.response?.statusCode 
      let errorString = String(describing: errorCode!) 
      print("Error " + errorString) 


     } 

     } 

编辑2:

我也试过如下:

let group = AsyncGroup() 

       group.utility { 

        for serial in serialarray 

        { 

        self.getVersion(serial: serial) 

        } 

       } 

       group.wait() 


        print (serialarray) 
        print (versionarray) 

        SwiftSpinner.hide() 

两个打印getVersion之前正在执行完成其循环来填充所述阵列。

+1

我们能看到更多的代码吗? versionarray是如何声明的? getVersion(serial:serial)是什么样的?这叫什么功能? –

+0

我向原始问题添加了信息 – Martheli

回答

0

Alamofire.request是一个异步调用,所以它会立即返回,因此您的方法getVersion将立即返回。您需要使getVersion方法等待,直到Alamofire.request完成调用并且在继续之前更新versionarray。

相关问题