2016-07-02 11 views
4

При изменении переменной внутри области вложенной функции она не изменяется после того, как область оставлена. В моем примере кода, когда я устанавливаю переменную xmlString равную ответу, она правильно получает ответ. Но затем возвращает пустую строку.
func getXmlString(url: String) -> String { var xmlString: String = "" Alamofire.request(.GET, url) .validate() .responseString { response in xmlString = response.result.value! } return xmlString }
Я знаю, что есть только крошечная вещь, которую мне не хватает, и любая помощь в понимании моей ситуации поможет мне. ThanksКак изменить переменную из вложенной функции?

ответ

1

Alamofire is acsynchonus. Вот почему ваш xmlString пуст. Вы должны подождать, пока у вас не будет ответа от Alamofire.

func getXmlString(url: String, completion: (xmlString: String) ->()) { 
      var xmlString: String = "" 
      Alamofire.request(.GET, url) 
       .validate() 
       .responseString { response in 
        xmlString = response.result.value! 

       completion(xmlString) 
      } 
} 

И использовать его

getXmlString(url: String){ xmlString in 

//do something with your String 
} 
+0

Есть ли способ, чтобы вернуть значение строки, как правило, как я предназначенный ?. – Hairy

+1

'func getXmlString (url: String, complete: (xmlString: String) -> (String))' –

+1

use: 'getXmlString (url) {(xmlString) -> String in return xmlString}' –

Смежные вопросы