【问题标题】:Returning JSON data as string but getting an error [closed]将 JSON 数据作为字符串返回但出现错误 [关闭]
【发布时间】: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 的新手,所以很难发帖

标签: ios swift xcode


【解决方案1】:

您的代码访问 currency,该 scrope 中不存在该代码

var currentcurr = ""
func getCoinPrice (currency:String) {
  currentcurr = currency
  //////
} 

然后在 vc 中的任意位置使用currentcurr

【讨论】:

  • 在哪里声明代码?它在视图控制器中吗?
  • 你已经有getCoinPrice 添加var currentcurr = "" only
【解决方案2】:

解决了我刚刚添加了一个带有空字符串的 var 并将我的货币数据分配给我声明的新变量。现在我将 JSON 数据作为字符串获取。

struct CoinManager {
var delegate: CoinManagerDelegate?
var currency1 = ""
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) {


      currency1 = currency



    let urlString = baseURL + currency
    performRequest(urlString: urlString)
    print(urlString)

}

【讨论】:

    猜你喜欢
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多