alt*_*tag 12 xcode ios swift swift-playground
在搜索了许多(很多!)快速游乐场问题甚至制作这些代码后,我仍然在苦苦挣扎.
我已经将一个文本文件放在Resources包内容的文件夹中,它在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")
}
Run Code Online (Sandbox Code Playgroud)
问题是,content在操场输出中显示为Some "apple\ngame\nhow\nswift\ntoken",而不是预期的文件内容.
它正在查找文件,因为如果我更改文件名,则会出错.有关获取文件内容的任何建议吗?
Xcode 6.1
编辑:
所以,实际问题是我没想到操场输出(包括,println)被转义.结合疲劳和其他愚蠢行为,让我相信存在问题,如果不存在的话.
有趣的是,并非一切似乎都在操场上逃脱:
println("foo\nbar") // Outputs "foo\nbar", escaped
println("\\n") // Outputs "\n", unescaped
Run Code Online (Sandbox Code Playgroud)
Leo*_*bus 11
您可以尝试创建一个用于打开和保存文件的类:
更新:Xcode 10•Swift 4.2
class File {
class func open(_ path: String, encoding: String.Encoding = .utf8) -> String? {
if FileManager.default.fileExists(atPath: path) {
do {
return try String(contentsOfFile: path, encoding: encoding)
} catch {
print(error)
return nil
}
}
return nil
}
class func save(_ path: String, _ content: String, encoding: String.Encoding = .utf8) -> Bool {
do {
try content.write(toFile: path, atomically: true, encoding: encoding)
return true
} catch {
print(error)
return false
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:File.save
let stringToSave: String = "Your text"
let didSave = File.save("\(NSHomeDirectory())/Desktop/file.txt", stringToSave)
if didSave { print("file saved") } else { print("error saving file") }
Run Code Online (Sandbox Code Playgroud)
用法:File.open
if let loadedData = File.open("\(NSHomeDirectory())/Desktop/file.txt") {
print(loadedData)
} else {
println("error reading file")
}
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢使用URLs(就像我做的那样并且Apple推荐):
请注意,在Swift 4中,该类URL已经存在.
class Url {
class func open(url: URL) -> String? {
do {
return try String(contentsOf: url, encoding: String.Encoding.utf8)
} catch {
print(error)
return nil
}
}
class func save(url: URL, fileContent: String) -> Bool {
do {
try fileContent.write(to: url, atomically: true, encoding: .utf8)
return true
} catch {
print(error)
return false
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看到使用TextEdit从.rtf文件创建的.txt文件的这个问题.
我使用类似的代码在我的游乐场的resources文件夹中加载了一个text.txt文件.文件内容是"你好",是通过更改扩展名将.rtf文件转换为.txt.
let path = NSBundle.mainBundle().pathForResource("text", ofType: "txt")//or rtf for an rtf file
var text = String(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: nil)!
println(text)
Run Code Online (Sandbox Code Playgroud)
输出是:
{\ rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf140 {\ fonttbl\f0\fswiss\fcharset0 Helvetica;} {\ colortbl;\red255\green255\blue255;}\margl1440\margr1440\vieww10800\viewh8400\viewkind0\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural
\ f0\fs24\cf0你好那里}
所以"你好那里"是嵌入式的.这是.rtf文件中所有布局信息的问题.
我回到TextEdit并创建了一个真正的.txt文件.打开文件后 - 格式化|制作纯文本
现在这个相同的代码给控制台输出"你好那里".
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
18249 次 |
| 最近记录: |