我正在构建一个小工具来将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库中没有任何内容会导致每次重新加载文件 – 在让csv = CSV(…)之后,您实际上只是使用了几个嵌套的Array和Dictionary实例.记忆
(但是,CSV库的实现并不是非常节省内存 – 重复数据和头文件的超级复制.)
我原以为您遇到了代码示例中描述的性能问题,但现在我看到了您遇到的问题.您无法根据其他属性设置默认属性值,因此需要在初始化程序中加载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]
}
}