在Swift 2.2中返回Alamofire请求的值

时间:2016-07-31 19:04:02

标签: swift swift2 alamofire

下午好,

我试图创建一个简单的函数来使用Swift 2.2中的Alamofire使用外部API检索一些信息,但是当我想要返回值时,它总是为空。

我尝试关注此网站上的其他一些质量检查以及其他网站上的更多质量检查,但我无法从此功能返回该值。

当我在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 :(得分:1)

查看网站上最常见的问题。您的问题是时间问题 - 如果您要在完成处理程序内部打印两个结果,那么您将看到该函数在完成处理程序执行之前返回。它们是异步的,函数调用本身在结果返回之前消失了