swift 3 REST api - get调用返回1个字节而不是1个(作为int),为什么?

时间:2017-05-01 10:59:16

标签: rest api swift3 get

所以我想从我的数据库中获取一个数字。当我使用邮递员时,我的来电返回1。但是,当我在下面运行此代码时,我得到1个字节。

func getDbVersionFromServer(callback: @escaping (_ serverDbVersion: Int16)-> ()) {
    let urlPath = "\(baseApiUrl)/users/getDBVersion"
    let url = NSURL(string: urlPath)
    let session = URLSession.shared
    let request = NSMutableURLRequest(url: url as! URL)
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    getTokensFromDB(){dbTokens in
    request.addValue(dbTokens["accessToken"]!, forHTTPHeaderField: "accessToken")
    request.addValue(dbTokens["refreshToken"]!, forHTTPHeaderField: "refreshToken")
    request.httpMethod = "GET"

            let task = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in

                if let httpResponse = response as? HTTPURLResponse {
                    if (httpResponse.statusCode == 200){
                        let aToken = httpResponse.allHeaderFields["accessToken"] as? String
                        updateAccessTokenOnly(newAccessToken: aToken!)

                        let dbVersion = data
                        print("here is data: \(data!) and here is dbVersion \(dbVersion!)")
                        callback(0)
                    }
                }
            })
            task.resume()
    }
}

我在这里做错了什么?我怎么得到我的1?提前谢谢!

1 个答案:

答案 0 :(得分:3)

数据类型为Data,因此,如果您的回复未返回JSON,则可以使用String(data:encoding:)来获得预期结果。

let task = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in

    if let httpResponse = response as? HTTPURLResponse {
        if (httpResponse.statusCode == 200){
            let aToken = httpResponse.allHeaderFields["accessToken"] as? String
            updateAccessTokenOnly(newAccessToken: aToken!)

            if let data = data, let stringResponse = String(data: data, encoding: .utf8) {
                print("Response \(stringResponse)")
            }
            callback(0)
        }
    }
})
task.resume()