在swift,iOS游乐场中读取文件 [英] Read file in swift, iOS playground

查看:109
本文介绍了在swift,iOS游乐场中读取文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通过搜索许多(很多!)快速的游乐场问题来搜索这个代码,我仍然在苦苦挣扎。

Having searched through the many (many!) swift playground questions to even craft this code, I'm still struggling.

I已将文本文件放在包内容的 Resources 文件夹中,它在操场生成的运行临时文件中显示为别名(链接)( / var / folders / ... )。

I've placed a text file in the Resources folder of package contents, and it appears as an alias (link) in the running temp files generated by the playground (/var/folders/ ...).

import UIKit

let bundle = NSBundle.mainBundle()

let myFilePath = bundle.pathForResource("dict1", ofType: "txt")

println(myFilePath)    // <-- this is correct, there is a shortcut to the Resource file at this location

var error:NSError?

var content = String(contentsOfFile:myFilePath!, encoding:NSUTF8StringEncoding, error: &error)

println(content!)  // <-- this is *NOT* the file contents [EDIT: see later note]

// Demonstrate there's no error
if let theError = error {
    print("\(theError.localizedDescription)")
} else {
    print("No error")
}

问题在于,内容在游乐场输出中显示为一些apple \\\
game \\\
how \ nswift \\ \\ antoken
,而不是预期的文件内容。

The problem being, that content is shown in the playground output as being Some "apple\ngame\nhow\nswift\ntoken", rather than the file contents as expected.

它正在查找文件,因为如果我更改文件名,则会出错。有关获取文件内容的任何建议吗?

It's finding the file, because if I change the filename, it errors. Any advice on getting the file contents?

Xcode 6.1

Xcode 6.1

编辑:
所以,实际的问题是我没想到要转义的游乐场输出(包括 println )。结合疲劳和其他愚蠢行为使我相信存在问题,当时不存在。

So, the actual problem was that I wasn't expecting the playground output (including, println) to be escaped. That, combined with fatigue and other stupidities led me to believe there was a problem, when none existed.

有趣的是,并非一切似乎都在游乐场中逃脱:

Interestingly, not everything seems to be escaped in playground:

println("foo\nbar")    // Outputs "foo\nbar", escaped
println("\\n")         // Outputs "\n", unescaped


推荐答案

您可以尝试创建一个用于打开和保存文件的类:

You can try creating a class for opening and saving your files:

更新: Xcode 7.2•Swift 2.1.1

class File {
    class func open(path: String, encoding: NSStringEncoding = NSUTF8StringEncoding) -> String? {
        if NSFileManager().fileExistsAtPath(path) {
            do {
                return try String(contentsOfFile: path, encoding: encoding)
            } catch let error as NSError {
                print(error.code)
                return nil
            }
        }
        return  nil
    }
    class func save(path: String, _ content: String, encoding: NSStringEncoding = NSUTF8StringEncoding) -> Bool {
        do {
            try content.writeToFile(path, atomically: true, encoding: encoding)
            return true
        } catch let error as NSError {
            print(error.code)
            return false
        }
    }
}

用法:File.save

usage: File.save

let stringToSave:String = "Your text"

let didSave = File.save("\(NSHomeDirectory())/Desktop/file.txt", stringToSave) 

if didSave { println("file saved") } else { println("error saving file") } 

用法:File.open

usage: File.open

if let loadedData = File.open("\(NSHomeDirectory())/Desktop/file.txt") {
    println(loadedData)
} else {
    println("error reading file")
 }  

如果您更喜欢使用网址(正如我所做并由Apple推荐):

If you prefer working with URLs (as I do and recommended by Apple):

class Url {
    class func open(url: NSURL) -> String? {
        do {
            return try String(contentsOfURL: url, encoding: NSUTF8StringEncoding)
        } catch let error as NSError {
            print(error.code)
            return nil
        }
    }
    class func save(urL: NSURL, fileContent: String) -> Bool {

        do {
            try fileContent.writeToURL(urL, atomically: true, encoding: NSUTF8StringEncoding)
            return true
        } catch let error as NSError {
            print(error.code)
            return false
        }
    }
}

这篇关于在swift,iOS游乐场中读取文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆