写入文件,一种有效途径swift

标签: ios Swift
发布时间: 2017/3/6 23:21:20
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我从使用蓝牙传感器获取数据,我想要追加到文件末尾的数据的字符串。

当我尝试的常规方法

if let dir = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
        let path = NSURL(fileURLWithPath: dir).URLByAppendingPathComponent(self.file)

        do {
            try text.writeToURL(path, atomically: false, encoding: NSUTF8StringEncoding)
        }
        catch {/* error handling here */}

我的应用程序开始慢下来,直到连标签不不再更新。

尝试使用 dispatch_async 做后台线程,但它仍然放慢我的应用程序。

我应该使用什么方法?我读过有关流某事但未能找到一些解决办法在 swift 我可以依靠

解决方法 1:

可能你的蓝牙速度比您正在执行您的文件操作读取数据。您可以通过将文本追加到文件而不是阅读上每个写入操作的所有内容优化它。你也可以重用之间写入文件处理程序,使文件保持打开。

此示例摘自这个答案

struct MyStreamer: OutputStreamType {
    lazy var fileHandle: NSFileHandle? = {
        let fileHandle = NSFileHandle(forWritingAtPath: self.logPath)
        return fileHandle
    }()

    lazy var logPath: String = {
        let path : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first!
        let filePath = (path as NSString).stringByAppendingPathComponent("log.txt")

        if !NSFileManager.defaultManager().fileExistsAtPath(filePath) {
            NSFileManager.defaultManager().createFileAtPath(filePath, contents: nil, attributes: nil)
        }
        print(filePath)
        return filePath

    }()

    mutating func write(string: String) {
        print(fileHandle)
        fileHandle?.seekToEndOfFile()
        fileHandle?.writeData(string.dataUsingEncoding(NSUTF8StringEncoding)!)
    }
}

然后,您可以创建一个单一的流光并重用它不同的写入︰

var myStream = MyStreamer()
myStream.write("First of all")
myStream.write("Then after")
myStream.write("And, finally")

在这种情况下,你必须奖金, MyStreamer 也是 OutputStreamType ,所以你可以像这样使用它︰

var myStream = MyStreamer()
print("First of all", toStream: &myStream )
print("Then after", toStream: &myStream)
print("And, finally", toStream: &myStream)

最后,我推荐你将 'log.txt' 字符串移动到一个实例变量并将其作为构造函数的参数传递︰

var myStream = MyStreamer("log.txt")

更多关于苹果文档中的文件处理程序的信息。

官方微信
官方QQ群
31647020