【发布时间】:2019-12-22 23:48:23
【问题描述】:
上面的代码查询 API 的端点以获取特定国家/地区的比特币值。该端点以 JSON 形式返回值。我希望我的函数将 JSON 数据作为字符串返回,但我收到错误消息“无法将类型 '[String]' 的值转换为预期的参数类型'String'”。
struct CoinManager {
var delegate: CoinManagerDelegate?
let baseURL = "https://apiv2.bitcoinaverage.com/indices/global/ticker/BTC"
let currencyArray: [String] = ["AUD", "BRL","CAD","CNY","EUR","GBP","HKD","IDR","ILS","INR","JPY","MXN","NOK","NZD","PLN","RON","RUB","SEK","SGD","USD","ZAR"]
mutating func getCoinPrice(currency: String) {
let urlString = baseURL + currency
performRequest(urlString: urlString)
print(urlString)
}
func performRequest(urlString : String) {
if let url = URL(string: urlString) {
//2. Create URL session
let session = URLSession(configuration: .default)
//3. Give session a task
let task = session.dataTask(with: url, completionHandler: handle(data:response:error:))
//4. Start a task
task.resume()
}
}
func handle(data: Data?, response: URLResponse?, error: Error?) {
if error != nil {
delegate?.didFailWithError(error: error!)
return
}
if let safeData = data {
if let dataString = self.parseJSon(DatA: safeData){
let dataString1 = String(format: "%.2f", dataString)
//////////////////////////////////////////
self.delegate?.didUpdatePrice(price: dataString1, currency: currencyArray)
}
}
}
func parseJSon (DatA: Data) -> Double?{
let decoder = JSONDecoder()
do {
let decodedData = try decoder.decode(CoinData.self, from: DatA)
let lastPrice = decodedData.last
print(lastPrice)
return lastPrice
} catch {
delegate?.didFailWithError(error: error)
return nil
}
}
【问题讨论】:
-
这里的货币是什么?什么是 CoinManagerDelegate?你也可以发布他们的信息吗?并且,不要将您的代码作为图片发布。
-
请以文字而非图片的形式发布代码
-
@Sh_Khan 我是 stackoverflow 的新用户,所以我需要一点时间来理解
-
您发布了定义字符串数组的单行代码。你想要什么作为输出?一个 JSON 字符串?你需要更具体
-
@DuncanC 是的,我想要一个 JSON 字符串。我是 stackoverflow 的新手,所以很难发帖