

こんにちは、Swiftというかクロージャ?についての質問です。下のコードのようにAlamofire.request.responseJSON内で定義された定数をresponseJSON外でも利用できるようになる方法がもしあればご教授お願いいたします。

[code]

    import Alamofire
    import SwiftyJSON
    ...
    <中略>
    ...
    override func viewDidLoad() {
        super.viewDidLoad()
        let urlString = "http://hogehoge.com"
    
        Alamofire.request(urlString).responseJSON{ response in  
            let json = JSON(response.result.value!)
            let msg = json["key"]
            let strmsg = String(describing: msg)
        }
    
        print(strmsg) // error　ここでも何らかの方法で受け取ったりして使えるようにしたいです
    }
    ...
    <中略>
    ...
    
[/code]


CC BY-SA 3.0
2016-11-29T05:29:42.007
30760
2016-11-30T00:36:38.377
2016-11-30T00:36:38.377
76
19760
question
swift3 alamofire
Swift3のクロージャについて


セマフォを使用すると、

[code]

    let urlString = "http://hogehoge.com"
    let semaphore = DispatchSemaphore(value: 0)
    var strmsg = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    
    
        Alamofire.request(urlString).responseJSON{ [weak self] response in
            guard let wself = self else {
                return
            }
            let json = JSON(response.result.value!)
            let msg = json["key"]
            wself.strmsg = String(describing: msg)
            wself.semaphore.signal()
        }
        print("wait...")
        semaphore.wait()
        print("finish \(strmsg)")
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
[/code]

こうなると思います。  
こちらを参考にしました。
[SwiftでGCDを使ってみよう！](http://grandbig.github.io/blog/2016/01/18/semaphore/)  
Swift3で書き換えています。  
なお、動作確認はしていません。  
ご参考まで。


CC BY-SA 3.0
2016-11-29T06:22:09.347
30761
2016-11-29T08:03:22.727
2016-11-29T08:03:22.727
13605
13605
30760
answer