ios – Swift和混淆的新手 – 在Swift类中存储大型常量/数据集

我正在构建一个小工具来将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]
    }
}
点赞