2017-01-10 31 views
2

我刚刚开始用于JSON分析的'Alamofire'。现在我正面临一些问题,如下所示:如何使用swift访问Alamofire区块以外的数据3.0

问题声明:无法访问Alamofire区块之外的数据。

编码的东西:

import UIKit 

import Alamofire 

    class ViewController: UIViewController 
    { 
     var dataValue = String() 
     override func viewDidLoad() 
     { 
      super.viewDidLoad() 
      Alamofire.request("url") .responseJSON 
      { response in 

       dataValue = response.result.value 
       print(dataValue) // It prints value 
      } 
      print(dataValue) //It does not print any thing or nil. 
     } 

    } 
+1

提示:查找'completionHandler:' –

+0

请为我提供一些示例,完成处理程序,因为我是新手。 –

+0

@Ashish它没有完成部分,请检查我的答案 –

回答

2
var dataValue = String() 
override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    Alamofire.request("url") .responseJSON 
    { response in 

    dataValue = response.result.value 
    self.myFunction(str: dataValue) 
    } 
    } 

func myFunction(str: String) 
{ 
    print("str value ====%@",str) 
} 
+0

谢谢,现在我明白了。如何访问Alamofire以外的数据。 –

+0

你好,它解析JSON数据和非常缓慢地更新UIView。为什么发生这种情况? –

1

Alamofire使用块用于获取网络的API,以便根据您的问题。您可以通过将断点放入块并在块之后进行检查。

class ViewController: UIViewController 
    { 
     var dataValue = String() 
     override func viewDidLoad() 
     { 
      super.viewDidLoad() 
      Alamofire.request("url") .responseJSON 
      { response in 

       dataValue = response.result.value 
       print(dataValue) // It prints value 
      } 
      print(dataValue) //It does not print any thing or nil. 
     } 

    } 

这条线不会打印任何东西,因为它会先调试,而你的alamofire块调试与回报,当你得到回应&它将打印值。

所以我认为你可以使用dataValue的值到另一个函数中,因为它在获得响应后存储。

希望这会帮助你。

+0

谢谢@Jecky的回答。 –

+0

你是对的,首先在Alamofire调试之外变量,然后Alamofire,这就是为什么它打印零。 –

3

Alamofire块是一个异步回调。换句话说,只要响应就绪,它就会运行完成块。 如果您想在设置时使用dataValue。您可以利用变量属性中的didSet

class ViewController: UIViewController 
{ 
    var dataValue = String() { 
     didSet { 
      // do something here 
      print(dataValue) // It prints value 
     } 
    } 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     Alamofire.request("url") .responseJSON 
     { response in 

      dataValue = response.result.value 
      print(dataValue) // It prints value 
     } 
     print(dataValue) //It does not print any thing or nil. 
    } 

} 
+0

谢谢,这也适用。 –

相关问题