gpt4 book ai didi

swift - CSVImporter 在 vi​​ewdidload 之后开始导入 [Swift]

转载 作者:行者123 更新时间:2023-11-30 12:36:06 25 4
gpt4 key购买 nike

我想从 .csv 文件导入数据,因此我使用了 CSVImporter https://github.com/Flinesoft/CSVImporter 。它工作得很好,但它在执行函数 viewDidLoad 的其他部分之前开始导入。

以下代码只是一个测试,但我需要一个确保 CSVImporter 在其他 viewDidLoad 代码执行之前完成导入的解决方案,或者一个在 viewDidLoad 之后自动启动的函数。

这是我的代码:

var Vokabeln: [[String]]?


var i = 0


override func viewDidLoad() {
super.viewDidLoad()


let path = "/Users/---CENSORED---/Documents/TestLöschen/TestLöschen/Vokabeln.csv"
let importer = CSVImporter<[String]>(path: path, delimiter: ";")
importer.startImportingRecords { $0 }.onFinish { importedRecords in
for record in importedRecords {
self.Vokabeln?[self.i][0] = record[0]
self.Vokabeln?[self.i][1] = record[1]
self.Vokabeln?[self.i][2] = record[2]
print("Begin1")
print(record[0])
print(record[1])
print(record[2])
print("End1")
self.i += 1
}
}

print("Begin2")
print(Vokabeln?[0][0])
print(Vokabeln?[0][1])
print(Vokabeln?[0][2])
print(Vokabeln?[1][0])
print(Vokabeln?[1][1])
print(Vokabeln?[1][2])
print("End2")
}

所以首先它打印“Begin2”,然后 6 次打印 nil。然后,当函数 viewDidLoad 完成时,它会打印“Begin1”,然后是正确的变量和“End1”

有人可以帮我吗?谢谢。

最佳答案

startImportingRecords 异步工作,只需在重复循环后将代码放入完成处理程序中打印 Vokabeln 即可。

首先,您需要初始化数组,否则不会添加任何内容。并且不要将数组声明为可选,并且变量名称应该以小写字母开头。

var vokabeln = [[String]]()

例如,如果要更新 UI,请将代码包装在调度 block 中

importer.startImportingRecords { $0 }.onFinish { importedRecords in
for record in importedRecords {
self.vokabeln[self.i][0] = record[0]
self.vokabeln[self.i][1] = record[1]
self.vokabeln[self.i][2] = record[2]
print("Begin1")
print(record[0])
print(record[1])
print(record[2])
print("End1")
self.i += 1
}
DispatchQueue.main.async {
print("Begin2")
print(self.vokabeln[0][0])
print(self.vokabeln[0][1])
print(self.vokabeln[0][2])
print(self.vokabeln[1][0])
print(self.vokabeln[1][1])
print(self.vokabeln[1][2])
print("End2")
}
}

但是还有一个问题。如果将数组声明为 [[String]],则外部数组和内部数组均为空,并且无法使用索引下标分配值。我推荐这个语法

for record in importedRecords {
self.vokabeln.append(record) // this appends the whole record array
print("Begin1")
print(record)
print("End1")
}

PS:考虑使用更合适的文本格式,例如 JSON 或属性列表。

关于swift - CSVImporter 在 vi​​ewdidload 之后开始导入 [Swift],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42860908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com