我正在构建一个小实用程序来将 CSV 文件加载到我的应用程序中并每秒读取下一个值大约 5 次(csv 文件来自传感器记录器)
为此,我使用了这个 csv 库:https://github.com/naoty/SwiftCSV
现在,对于多于几行的 csv 文件,性能/更新率会受到显着影响。问题是我终生无法弄清楚每次调用 SensorRecording.getDatapoints() 时如何不加载 csv 文件
我猜它应该是一个只加载一次的全局类变量,但是在类声明的顶部添加变量“csvURL”和“csv”的相应行会产生一个奇怪的
"SensorRecording.Type does not have a member named 'csvPath'
如何将它存储在该类的全局变量中?
这是 SensorRecording 类代码:
import UIKit
class SensorRecording: UIViewController {
var cur: Int = 1
let csvPath = NSBundle.mainBundle().pathForResource("2014-09-21_23-25-32", ofType: "csv")
let csvURL = NSURL.fileURLWithPath(csvPath!)
let csv = CSV(contentsOfURL: csvURL!)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func getDatapoints() -> NSDictionary {
let rows = csv.rows
if (cur == (csv.rows.count-1)) { cur = 1 } else { cur++ }
return csv.rows[cur]
}
非常感谢
最佳答案
您的代码或 CSV 库中没有任何内容会导致文件每次都重新加载——在 let csv = CSV(...)
之后,您实际上只是在使用一个几个嵌套的 Array 和 Dictionary 实例。内存
(尽管该 CSV 库的实现不是非常节省内存——数据重复和 header 的 super 重复。)
我原以为您遇到了您在代码示例中描述的性能问题,但现在我看到了您遇到的问题。您不能根据其他属性设置默认属性值,因此您需要在初始化程序中加载 CSV 文件:
class SensorRecording {
var cur: Int = 1
var csv: CSV! // implicitly unwrapped: skip during initialization,
// but need to give value before accessing
init() {
// load CSV here
let csvPath = NSBundle.mainBundle().pathForResource("2014-09-21_23-25-32", ofType: "csv")
let csvURL = NSURL.fileURLWithPath(csvPath!)
csv = CSV(contentsOfURL: csvURL!)
}
func getDatapoints() -> NSDictionary {
let rows = csv.rows
if (cur == (csv.rows.count-1)) { cur = 1 } else { cur++ }
return csv.rows[cur]
}
}
关于ios - Swift 的新手和困惑 - 在 Swift 类中存储大型常量/数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26004516/