2017-05-01 12 views
0

私はDBから番号を取得しようとしています。私のgetコールは、私が郵便配達員を使うと1を返します。しかし、私はこのコードを下に実行すると、私は1バイトを取得します。swift 3 REST API呼び出しは、1(int)の代わりに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を得るのですか?前もって感謝します!

+0

、私のget呼び出しは、のInt 1を返す必要がありますが、それは返します:「ここにデータである:1バイト、ここでDBVERSIONが1バイトである」右けれどもStringにキャストし –

答えて

1

データタイプが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() 
+0

は?私が欲しいのはInt16のようなものです: let data = data、stringResponse = Int16(データ:データ、エンコーディング:.utf8){ print( "Response \(stringResponse)") } –

+0

ohとIt実際にはJSONとなるはずです –

+0

@SteffenLefort JSONを返すか、単に '1'を確認する必要があります。また、Int16(data:data、encoding:.utf8)のようなものはありませんが、この文字列をInt16、一度解答をしようとすると結果が得られます –

関連する問題