2016-07-02 8 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 }
내가 누락 된 작은 것이 있고 내 상황을 더 잘 이해하면 도움이 될 것입니다. 감사합니다중첩 함수에서 변수를 변경하는 방법은 무엇입니까?

답변

1

Alamofire는 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, completion : (xmlString : String))> –

+1

'getXmlString (url) {(xmlString) -> 문자열을 반환 xmlString}' –

관련 문제