PropertyListEncoder 不再支持二进制属性列表编码吗?

问题描述 投票:0回答:1

我正在尝试从文本文件为我正在编写的程序创建单词列表属性列表文件。

二进制属性列表比 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
没有生成二进制属性列表?

swift macos plist foundation
1个回答
0
投票

好吧,我觉得有点傻。

事实证明,上面的代码确实将我的文件保存为二进制属性列表。但是,BBEdit(未)有助于将文件转换为 XML 属性列表并显示该列表。

如果我将 plist 文件从上面的代码拖到 TextEdit 上,我会看到以下内容:

bplist00£UAPPLEVBANANAUGRAPE
© www.soinside.com 2019 - 2024. All rights reserved.