我正在尝试从文本文件为我正在编写的程序创建单词列表属性列表文件。
二进制属性列表比 XML 属性列表更小且读取速度更快,因此我更喜欢它们。
为此,我编写了一些代码(macOS 命令行工具)来读取我的单词列表文本文件,将其大写,将其转换为数组,并将其写入属性列表。
稍微更改该代码以使其适用于代码中的示例字符串,如下所示:
let filename = "SampleWords"
do {
var words =
"""
apple
banana
grape
"""
words = words.uppercased()
let wordsArray = words.components(separatedBy: "\n")
print(wordsArray.first ?? "nil")
let plistEncoder = PropertyListEncoder()
plistEncoder.outputFormat = .binary
let data = try plistEncoder.encode(wordsArray)
let plistPath = NSString(string: "~/Documents/\(filename).plist").expandingTildeInPath
let plistURL = URL(filePath: plistPath)
try data.write(to: plistURL)
} catch {
print("Error '\(error)' reading or encoding file")
fatalError()
}
当您运行它时,生成的文件 SampleWords.plist 在 BBEdit 中打开时如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>APPLE</string>
<string>BANANA</string>
<string>GRAPE</string>
</array>
</plist>
它可以工作,并且可以作为属性列表打开,但它使文件比二进制属性列表大两倍,并且读取速度更慢。
我是否遗漏了某个步骤?为什么我设置
outputFormat
的 PropertyListEncoder
没有生成二进制属性列表?
好吧,我觉得有点傻。
事实证明,上面的代码确实将我的文件保存为二进制属性列表。但是,BBEdit(未)有助于将文件转换为 XML 属性列表并显示该列表。
如果我将 plist 文件从上面的代码拖到 TextEdit 上,我会看到以下内容:
bplist00£UAPPLEVBANANAUGRAPE