csv 无法打开该文件,因为没有这样的文件

lh80um4z  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(122)

我是Swift的新手,正试图弄清楚如何将CSV文件导入数组。我好像不能让它工作。

import SwiftUI

func getCSVData() -> Array<String> {
    do {
        let url = URL(fileURLWithPath: "http://www.rupert.id.au/resources/4000-most-common-english-words-csv.csv")
        let content = try String(contentsOf: url)
        let parsedCSV: [String] = content.components(separatedBy: "\n").map{ $0.components(separatedBy: ",")[0] }
        return parsedCSV
    }
    catch {
        return [error.localizedDescription]
    }
}

struct ContentView: View {
    var words2 = getCSVData()
    var body: some View {
        VStack{
            Text(words2[0])
        }  
    }
}
kqqjbcuj

kqqjbcuj1#

您的代码有多个问题,例如:
Apple需要https连接。要使用http,您需要在Info.plist中设置“NSAppTransportSecurity”以允许http连接到服务器。也可以使用https://.....
您的getCSVData()应该是一个异步函数(查找它的含义)。所以你在var words2 = getCSVData()中不会得到任何东西,因为你不能在你做的地方调用函数。
声明@State var words: [String] = [],以便在数据到来时可以更改它,请参阅使用SwiftUI和使用@State的基础知识。
要从服务器获取文件,请使用注解中提到的URL(string: ...)。注意,如果你只是使用这个,你会得到一个警告,.... Please switch to an asynchronous networking API such as URLSession。有不同的方法可以避免这种情况,示例代码使用推荐的URLSession
将所有这些放在一起,并遵循其他注解的建议,尝试以下示例代码:

import Foundation
import SwiftUI

struct ContentView: View {
    @State var words: [String] = []  // <--- here
    
    var body: some View {
        if words.count > 0 {
            Text("first word: \(words[0])").foregroundStyle(.red)
        }
        List(words, id: \.self){ word in
            Text(word)
        }
        .task {
            words = await getCSVData()  // <--- here
        }
    }
    
    func getCSVData() async -> [String] {  // <--- here
        // --- here, https
        guard let url = URL(string: "https://www.rupert.id.au/resources/4000-most-common-english-words-csv.csv") else {
            return ["Invalid URL"]
        }
        do {
            let (data, _) = try await URLSession.shared.data(from: url)
            let content = String(data: data, encoding: .utf8)!
            let parsedCSV: [String] = content.components(separatedBy: "\n").map{ $0.components(separatedBy: ",")[0] }
            return parsedCSV
        }
        catch {
            return [error.localizedDescription]
        }
    }
    
}

相关问题