2017-09-29 1 views
0

질문 내 ApiToken 함수에서 반환 된 값을 가져와 다른 함수에서 사용할 수 있도록하고 싶습니다. 어떤 이유로이 함수에서 값을 얻을 수 없다. 아무 것도 반환하지 않을 것이다. ApiToken 함수에서 값을 반환하고 다른 함수에서이를 사용할 수 있습니까? 여기 콜백 함수에서 값 가져 오기 swift

다음
class GetApiToken { 



    public func ApiToken(link: String, completionBlock: @escaping (String) -> Void) -> Void 
    { 
     let url = URL(string: link)! 
     let jsonDict = ["username": "snow", "password": "ssssssssss"] 
     let jsonData = try! JSONSerialization.data(withJSONObject: jsonDict, options: []) 

     var request = URLRequest(url: url) 
     request.httpMethod = "post" 
     request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
     request.httpBody = jsonData 

     let task = URLSession.shared.dataTask(with: request) { (data, response, error) in 
      if let error = error { 
       print("error:", error) 
       return 
      } 

      do { 
       guard let data = data else { return } 

       guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject] else { return } 

       //self.token = json["access_token"] as? String ?? "x" 
       completionBlock((json["access_token"] as? String)!) 



      } catch { 
       print("error:", error) 
      } 
     } 

     task.resume() 
    } 
} 

내가 값

func getData(_ link:String) 
    { 
     let url = URL(string: link)! 
     var request = URLRequest(url: url, cachePolicy: .reloadIgnoringCacheData, timeoutInterval: 20) 
     request.httpMethod = "GET" 
     var output = "" 
     GetApiToken().ApiToken(link: "http://localhost:5000/auth", completionBlock: { str in 
      output = str 

     }) 
     request.addValue("JWT \(output)", forHTTPHeaderField: "Authorization") 
     request.setValue("application/json", forHTTPHeaderField: "Content-Type") .......... 

답변

1

해당합니다 모든 것을 둘 필요가 그래서, 비동기 호출의를 얻기 위해 노력하고 있어요 곳입니다 ApiToken 기능을 내 GetApiToken 클래스입니다 완료 콜백에서 데이터를 검색하면 발생

func getData(_ link:String) 
{ 
    let url = URL(string: link)! 
    var request = URLRequest(url: url, 
          cachePolicy: .reloadIgnoringCacheData, 
          timeoutInterval: 20) 
    request.httpMethod = "GET" 
    GetApiToken().ApiToken(link: "http://localhost:5000/auth", 
          completionBlock: 
          { output in 
          request.addValue("JWT \(output)", forHTTPHeaderField: "Authorization") 
          request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
          ....... 
          }) 
+0

굉장! 감사합니다 @ XmasRights – Snowman08

관련 문제