我正在用 Swift 5 撰寫一個 Mac 命令列工具,我正在嘗試決議一個 Plist,其中包含一個名為“TestValues”的嵌套值字典。我想將此字典中的每個密鑰對添加到一個陣列中,但我只是碰壁了。
Plist 如下所示:
<?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">
<dict>
<key>TestValues</key>
<dict>
<key>TestString</key>
<string>This is my test string value</string>
<key>TestInt</key>
<integer>4</integer>
<key>AnotherTestString</key>
<string>This is my other test string value</string>
<key>TestBool</key>
<true/>
</dict>
</dict>
</plist>
我的代碼:
struct CustomPrefs: Codable {
var TestValues: [TestValuePrefs]
}
struct TestValuePrefs: Codable {
var TestString: String
var TestInt: Int
var AnotherTestString: String
var TestBool: Bool
}
func getCustomPrefs() -> CustomPrefs? {
let decoder = PropertyListDecoder()
let url = URL(fileURLWithPath: "/Library/Preferences/com.test.preferences.plist")
if let data = try? Data(contentsOf: url) {
if let customPreferences = try? decoder.decode(CustomPrefs.self, from: data) {
print("Returning custom prefs")
return customPreferences
}
}
print("Returning nil")
return nil
}
let preferenceArray = (getCustomPrefs()?.TestValues)
print(preferenceArray ?? "")
但我只是從“getCustomPrefs”函式中得到零。誰能看到我哪里出錯了?
uj5u.com熱心網友回復:
TestValuesvar in不是陣列或字典,CustomPrefs而是TestValuePrefs物件。
以下應該可以解決問題:
struct CustomPrefs: Decodable {
let TestValues: TestValuePrefs
struct TestValuePrefs: Decodable {
let TestString: String
let TestInt: Int
let AnotherTestString: String
let TestBool: Bool
}
}
func getCustomPrefs() -> CustomPrefs? {
let decoder = PropertyListDecoder()
let url = URL(fileURLWithPath: "/Library/Preferences/com.test.preferences.plist")
do {
let data = try Data(contentsOf: url)
let customPreferences = try decoder.decode(CustomPrefs.self, from: data)
return customPreferences
}
catch {
print("Error: \(error)")
}
return nil
}
我還建議使用CodingKeys以避免使用大寫變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506891.html
