Нет доступа к моей переменной за пределами блока do-catch в Swift 2.2

Я пытаюсь передать responseDict в self.saveApiTokenInKeychain(responseDict), но он говорит, что это неразрешенный идентификатор. До того, как я внедрил блок Do-Catch, он работал нормально. Как мне снова сделать его доступным для этого метода?

httpHelper.sendRequest(httpRequest, completion: {(data:NSData!, error:NSError!) in
    //show error
    if error != nil {
        let errorMessage = self.httpHelper.getErrorMessage(error)
        self.displayAlertMessage("Error", alertDescription: errorMessage as String)

        return
    } 
    //hide activity indicator and update userLoggedInFlag
    self.activityIndicatorView.hidden = true
    self.updateUserLoggedInFlag()

    var jsonerror:NSError?

    do {
        let responseDict = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary
    } catch let error as NSError {
        print("Error: \(error.domain)")
    }
    var stopBool : Bool

    //save API AuthToken and ExpiryDate in Keychain
    self.saveApiTokenInKeychain(responseDict)
    })

person Nick    schedule 21.04.2016    source источник


Ответы (1)


Это потому, что ваш responseDict не входит в область действия при вызове

self.saveApiTokenInKeychain(responseDict)

Переместите объявление responseDict из do-catch следующим образом:

var responseDict: WhateverTheTypeIs
do {
    responseDict = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary
} catch let error as NSError {
    print("Error: \(error.domain)")
}
person Rasmus Friis Kjeldsen    schedule 21.04.2016
comment
Спасибо, что сделал это - person Nick; 21.04.2016