swiftUI 2.0 列表滚动非常慢,我找不到原因。即使 Paul Hudson 技巧也不起作用

swiftUI 2.0 list is very slow to scroll, I can't find the reason.. Even the Paul Hudson trick doesn't work

这是我的代码,我解码了一个很长的代码 json,使用一个对象,@State,...这里有什么问题为什么滚动如此缓慢? 我通过添加 .id(UUID()) 广告列表级别尝试了 Paul Hudson 技巧,但没有成功。是不是和我放错了dispatchingQueue.main.async有关系?我真的不知道。 换行符:double space 或 欢迎任何帮助!

import SwiftUI

struct ContentView: View {


@State private var shifts = [Shift]()
    
    
    
    var body: some View {
       
        
        NavigationView {
             
              
            
                List(shifts, id: \.id) { shift in
                
                                HStack() {
                                Text(shift.date)
                                    .font(.caption2)
                                padding()
                                Text(shift.name)
                                    .font(.footnote)
                                padding()
                                Text(shift.planned)
                                    .font(.footnote)
                                Text(":")
                                    .font(.footnote)
                                Text(shift.replaced)
                                    .font(.footnote)
                               
                            
                    }
                }.id(UUID())
                
          
            
        }.onAppear(perform: {
            loadData()
        })
        }
            
        
       
        
            
        
    }
    
        
    
extension ContentView
{
    func loadData() {
        let login = "xxx"
        let password = "xxxx!"
        let ftpServer = "www.xxxx.be"
        let fileName = "export.json"
        let ftpUrl =  "ftp://\(login):\(password)@\(ftpServer)/\(fileName)"
       
        guard let url = URL(string: ftpUrl) else {
           print("error connection")
            return
        }
        
        let request = URLRequest(url: url)
        URLSession.shared.dataTask(with: request) { data, response, error in
            
            if let data = data {
                            if let ShiftDataStore = try? JSONDecoder().decode(ShiftDataStore.self, from: data) {
                                
                                
                                DispatchQueue.main.async {
                                    self.shifts = ShiftDataStore.shifts
                                }
                            }
                        }
                        
                    }.resume()
      
    }
}





import Foundation

struct Shift: Decodable,Hashable {
    
    var name: String
    var planned: String
    var replaced: String
    var gsm: String
    var function: String
    var replacedFunction : String
    var date: String
    var id: UUID = UUID()

       
    
    enum CodingKeys: String, CodingKey {
            
            case name = "N"
            case planned = "S"
            case replaced = "RS"
            case gsm = "M"
            case function = "R"
            case replacedFunction = "RR"
            case date = "D"
            
    
        }
   
     init(from decoder: Decoder) throws {
            let values = try decoder.container(keyedBy: CodingKeys.self)

        name = try values.decode(String.self, forKey: .name)
        planned = try values.decode(String.self, forKey: .planned)
        replaced = try values.decode(String.self, forKey: .replaced)
        gsm = try values.decode(String.self, forKey: .gsm)
        function = try values.decode(String.self, forKey: .function)
        replacedFunction = try values.decode(String.self, forKey: .replacedFunction)
        date = try values.decode(String.self, forKey: .date)
        
        
            
        }
    }


    struct ShiftDataStore: Decodable {
        var shifts: [Shift]
    }
    

通过将 padding() 更改为 spacer() 解决了滚动问题。 感谢阅读和帮助!