Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 错误导致代码崩溃:Can';t从空集合中删除最后一个元素_Json_Swift_Xcode - Fatal编程技术网

Json 错误导致代码崩溃:Can';t从空集合中删除最后一个元素

Json 错误导致代码崩溃:Can';t从空集合中删除最后一个元素,json,swift,xcode,Json,Swift,Xcode,我正在尝试绘制一些数据图表,下面的代码最初是有效的,有时也会起作用,但现在它似乎大部分都崩溃了,我认为json函数中的if let data=data行意味着它只有在收到数据后才会运行。我有一种感觉,也许函数在完全加载之前正在展开数据,但我不确定 import SwiftUI import SwiftUICharts struct CoinGeckoBSVMarketChart: View { // @State var jsonData = [MarketChart]() @S

我正在尝试绘制一些数据图表,下面的代码最初是有效的,有时也会起作用,但现在它似乎大部分都崩溃了,我认为json函数中的if let data=data行意味着它只有在收到数据后才会运行。我有一种感觉,也许函数在完全加载之前正在展开数据,但我不确定

import SwiftUI
import SwiftUICharts

struct CoinGeckoBSVMarketChart: View {
   // @State var jsonData = [MarketChart]()
    @State var priceArray = [Double]()
    @State var volumeArray: [Double] = []
    
    private let last24hpricesURL: String = "https://api.coingecko.com/api/v3/coins/bitcoin-cash-sv/market_chart?vs_currency=usd&days=1"
    
    var body: some View {
        ZStack {
            VStack {
                LineView(data: priceArray)
                    .padding()
                
                Text("Reset")
                    .onTapGesture {
                        // will add a tap to refresh data by resetting the array to empty then retuning the getJSON 
                    }
            }
        }
        .onAppear {
            getJSON(urlString: last24hpricesURL) { (data: MarketChart?) in
                if let data = data {
                    for item in data.prices {
                        priceArray.append(item.last!)  // It worked the first time and still on occasion but error prone, and works in playground
                    }
                }
            }
        }
    }
}

struct MarketChart: Decodable {
    let prices: [[Double]]
    let market_caps: [[Double]]
    let total_volumes: [[Double]]
}

struct CoinGeckoBSVMarketChart_Previews: PreviewProvider {
    static var previews: some View {
        CoinGeckoBSVMarketChart()
            .preferredColorScheme(.dark)
    }
}
下面是getJSON,如果需要,可以参考 :

func-getJSON(urlString:String,completion:@escaping(T?)->Void){
guard let url=url(字符串:urlString)else{
返回
}
let request=URLRequest(url:url)
URLSession.shared.dataTask(带:请求){(数据、响应、错误)在
如果let error=error{
打印(错误。本地化描述)
完成(无)
返回
}
guard let data=其他数据{
完成(无)
返回
}
let decoder=JSONDecoder()
decoder.dateDecodingStrategy=.secondsSince1970
guard let decodedData=try?decoder.decode(T.self,from:data)else{
完成(无)
返回
}
完成(解码数据)
}1.简历()
}
在每个参数中都有一个双精度的时间戳和值,现在我只想恢复这个值。
任何帮助都将是非常好的,谢谢你

你需要安全地添加它,以防里面有一个空元素
让价格:[[Double]]

for item in data.prices {
   if let res = item.last {
      priceArray.append(res) 
   }
}

我遇到了完全相同的问题,解决方法是避免在for循环中附加到标有@State的数组。我只能假设这样做会导致不必要的行为,因为观察状态的所有内容都会在每次修改数组时得到通知。因此,对我来说,解决这个问题的方法是:

var tempPriceArray = [Double]()
for item in data.prices {
    tempPriceArray.append(item.last!)  
}
priceArray = tempPriceArray

请共享崩溃报告2020-07-28 00:27:50.374395+0100 Stonks[8280:1495571]libMobileGestalt MobileGestaltCache.c:166:缓存加载了4518个缓存数据中的预缓存项和45个缓存额外项。致命错误:无法从空集合中删除最后一个元素:file/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1200.2.22.2/swift/stdlib/public/core/rangereplacablecollection.swift,第854行Stonks[8280:1495415]致命错误:无法从空集合中删除最后一个元素:file/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang collection.swift,第854行我得到的错误是线程1:致命错误:无法从空位置删除最后一个元素我在任何代码中都不使用删除,我想这是指最后一个in item.last,当我们附加array@HenryHudson你有没有弄明白他的意思。我也有同样的问题。你能解决这个问题吗?不,我仍然没有让它工作,这是一个奇怪的错误,可能是一个Xcode错误?很可能你在这里遗漏了一些东西。您在这里提供的代码没有任何问题,您可能没有在这里共享整个代码。试着对你所面临的问题做一个简单的描述。
var tempPriceArray = [Double]()
for item in data.prices {
    tempPriceArray.append(item.last!)  
}
priceArray = tempPriceArray