2017-04-25 11 views
1

このコードの目的は、クロージャの変数をグローバル変数に格納することです。このコードでは、jsonResponse.dataをaaに格納したいが、クロージャの外側にはいつでもaa論理ではありますが、この変数をクロージャの外側に残す方法はありますか?あなたの助けのためのクロージャから変数にデータを格納する

おかげ

私のコード

import UIKit 
import Alamofire 

class ViewController: UIViewController { 

    var myJson:NSDictionary? 
    var aa:Any? 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let url="https://mastodon.cloud/api/v1/apps" 

     Alamofire.request(url, method: .post, parameters: ["client_name": "Coucou", "redirect_uris": "urn:ietf:wg:oauth:2.0:oob", "scopes": "read"]).responseJSON { (jsonResponse) in 
      if jsonResponse.error != nil{ 
       print("error \(jsonResponse.error.debugDescription)") 
       return 
      } 
      print(jsonResponse.data!) 
      self.aa=jsonResponse.data! 
     } 
     print(aa) // return nil !!! 
    } 
} 

答えて

1

あなたは正しい軌道に乗っているが、あなたのコードが間違った順序で実行されます。 "print"はクロージャの前に実行されるので、 "nil"は正しいです。

クロージャが終了した後で「print(aa)」を呼び出すと、正しく設定されます。

print(jsonResponse.data!) 
    self.aa=jsonResponse.data! 
    print(self.aa) // should work 
} 
+0

彼は..だけ –

+1

Alamofire.request閉鎖は、非同期呼び出しで閉鎖後の印刷(AA)を呼び出すので、その私が知っているが、Idが「まで閉鎖からの私の応答を保存したいと@SanketBhavsar – OliverM

+0

印刷した後に実行されますクラス変数、それは可能ですか? –

-1

あなたのself.aaを初期化していないようです。次のように試してみてください。

self.aa = NSData(data: jsonResponse.data); 
+0

NSDataにメンバーdataWithDataがありませんか? –

+1

Initメソッドを使用します。 NSData(データ:あなたのデータ) – Darshana

+0

ありがとうございますが、まだnilを返します –

関連する問題