2016-07-31 105 views
0

下午好Alamofire要求返回值,从雨燕2.2

我试图创建一个简单的函数来检索使用与Alamofire外部API在雨燕2.2的一些信息,但是当我想返回值是总是空的。

我试图关注本网站的其他一些质量检查以及其他网站的更多质量保证,但是我无法从此功能返回值。

当我在Alamofire中打印我的变量(概述)时,它是正确的,但是当我尝试返回它时,它总是空的。我需要在代码中添加(或更改)以使其工作?

这里是我的功能:

func getOverview(slug: String, clientID: String) -> String { 

    let movieURL: String = "https://api.trakt.tv/movies/"+slug+"?extended=full" 

    let headers = ["trakt-api-version":"2", "Content-Type": "application/json", "trakt-api-key": clientID] 

    var overview: String = "" 

    Alamofire.request(.GET, movieURL, headers: headers).responseJSON { response in 

     if response.result.isSuccess { 
      let movieInfo = JSON(data: response.data!) 
      overview = self.parseMovieOverview(movieInfo) 
      // THAT'S CORRECT 
      print(overview) 
     } else { 
      print(response.result.error) 
     } 
    } 

    // THAT'S EMPTY 
    return overview 
} 

这是我的电话:

// THAT'S ALWAYS EMPTY  
overview = getOverview(slug, clientID: clientID) 

与返回的值概述编辑:

func parseMovieInfo(json: SwiftyJSON.JSON, clientID: String) -> [Movie] { 

    for result in json.arrayValue { 

     let slug = result["ids"]["slug"].stringValue 
     let title = result["title"].stringValue 
     let year = result["year"].stringValue 

     // OVERVIEW 
     let overview = getOverview(slug, clientID: clientID) 

     // PICTURE 
     let picture = getPicture(slug, clientID: clientID) 

     let movie = Movie(slug: slug, title: title, year: year, overview: overview, picture: picture) 

     self.movies.append(movie) 
    } 

    return movies 
} 

大加赞赏,

问候

回答

1

看看网站上最常见的问题。你的问题是时机之一 - 如果你要在完成处理程序内部和外部打印两个结果,你会看到该函数在完成处理程序执行之前就会很好地返回。它们是异步的,并且函数调用本身在结果返回之前已经消失了

+0

你能告诉我一些光@Feldur吗?我仍然试图使用完成处理程序来完成这项工作,但我无法达成解决方案。亲切的问候。 –

+0

告诉我你对返回值做了什么。 – Feldur

+0

我在第一篇文章中添加了代码。我希望你能帮助我@Feldur,因为我不知道如何继续。我试图在completionHandler中使用“dataTaskWithRequest”,但我必须提出3个请求,这很棘手(一个用于一般信息,一个用于概述,另一个用于图片),因为它们在不同的API调用中。 –