Return Swift 2.2 中来自 Alamofire 请求的值
Return value from Alamofire request in Swift 2.2
下午好,
我正在尝试创建一个简单的函数来使用外部 API 和 Swift 2.2 中的 Alamofire 检索一些信息,但是当我想要 return 值时,它总是空.
我尝试从该网站关注一些其他 QA,并从其他网站关注更多,但我无法 return 此功能的价值。
当我在 Alamofire 中打印我的变量(概述)时它是正确的,但是当我尝试 return 它时,它总是空的。我必须在我的代码中添加(或更改)什么才能使其正常工作?
这是我的函数:
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)
使用 returned 值概述进行了编辑:
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
}
非常感谢,
此致
查看网站上最常见的问题。您的问题是时间问题之一 - 如果您要在完成处理程序内部和外部打印两个结果,您将在完成处理程序执行之前看到函数 returns 。它们是异步的,函数调用本身在结果返回之前就消失了
下午好,
我正在尝试创建一个简单的函数来使用外部 API 和 Swift 2.2 中的 Alamofire 检索一些信息,但是当我想要 return 值时,它总是空.
我尝试从该网站关注一些其他 QA,并从其他网站关注更多,但我无法 return 此功能的价值。
当我在 Alamofire 中打印我的变量(概述)时它是正确的,但是当我尝试 return 它时,它总是空的。我必须在我的代码中添加(或更改)什么才能使其正常工作?
这是我的函数:
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)
使用 returned 值概述进行了编辑:
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
}
非常感谢,
此致
查看网站上最常见的问题。您的问题是时间问题之一 - 如果您要在完成处理程序内部和外部打印两个结果,您将在完成处理程序执行之前看到函数 returns 。它们是异步的,函数调用本身在结果返回之前就消失了