I want have some decimal numbers stored in plist and retrieve them on request.
The 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>sessionLength</key>
<integer>1800</integer>
<key>name</key>
<string>Sleeping</string>
<key>generators</key>
<array>
<dict>
<key>dynamic</key>
<dict>
<key>amplitude</key>
<string>40,35,32,30,28,26,22,14,4</string>
<key>beat</key>
<string>3.8,3.3,3.0,3.0,2.8,2.6,2.4,2.0,2.0</string>
<key>carrier</key>
<string>1:3,1:5,1:6,1:5,1:6,1:5,1:6,1:4,1:3</string>
<key>type</key>
<integer>0</integer>
<key>isoType</key>
<integer>0</integer>
<key>depth</key>
<string>40,40,40,40,40,40,40,40,40</string>
</dict>
<key>static</key>
<dict>
<key>amplitude</key>
<real>45</real>
<key>beat</key>
<real>2.4</real>
<key>carrier</key>
<real>180.6</real>
<key>depth</key>
<integer>40</integer>
<key>type</key>
<integer>0</integer>
<key>isoType</key>
<integer>0</integer>
</dict>
</dict>
<dict>
<key>dynamic</key>
<dict>
<key>amplitude</key>
<string>40,40,40,40,40,40,40,40,40</string>
<key>beat</key>
<string>3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8</string>
<key>carrier</key>
<string>2:3,1:5,1:6,1:5,1:6,1:5,1:6,1:4,1:3</string>
<key>type</key>
<integer>0</integer>
<key>isoType</key>
<integer>0</integer>
<key>depth</key>
<string>40,40,40,40,40,40,40,40,40</string>
</dict>
<key>static</key>
<dict>
<key>amplitude</key>
<integer>50</integer>
<key>beat</key>
<real>2</real>
<key>carrier</key>
<real>110</real>
<key>depth</key>
<integer>80</integer>
<key>type</key>
<integer>0</integer>
<key>isoType</key>
<integer>0</integer>
</dict>
</dict>
<dict>
<key>dynamic</key>
<dict>
<key>amplitude</key>
<string>40,40,40,40,40,40,40,40,40</string>
<key>beat</key>
<string>3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8</string>
<key>carrier</key>
<string>1:5,1:5,1:6,1:5,1:6,1:5,1:6,1:4,1:3</string>
<key>type</key>
<integer>1</integer>
<key>isoType</key>
<integer>2</integer>
<key>depth</key>
<string>70,65,65,50,45,40,40,35,30</string>
</dict>
<key>static</key>
<dict>
<key>amplitude</key>
<integer>55</integer>
<key>beat</key>
<real>4</real>
<key>carrier</key>
<integer>180</integer>
<key>depth</key>
<integer>90</integer>
<key>type</key>
<integer>0</integer>
<key>isoType</key>
<integer>0</integer>
</dict>
</dict>
</array>
</dict>
</plist>
I am using Decodable protocol to retrieve data.
struct PresetData: Decodable {
private enum CodingKeys: String, CodingKey {
case name, sessionLength, generators
}
let name: String
let sessionLength: Int
let generators: [PresetStoredData]
}
struct PresetStoredData: Decodable {
private enum CodingKeys: String, CodingKey {
case `static`, dynamic
}
let `static`: PresetStoredItem
let dynamic: PresetStoredDynamicItem
}
struct PresetStoredItem: Decodable {
private enum CodingKeys: String, CodingKey {
case amplitude, beat, carrier, depth, type, isoType
}
let amplitude: Float
let beat: Float
let carrier: Float
let depth: Float
let type: Int
let isoType: Int
}
struct PresetStoredDynamicItem: Decodable {
private enum CodingKeys: String, CodingKey {
case amplitude, beat, carrier, depth, type, isoType
}
let amplitude: String
let beat: String
let carrier: String
let depth: String
let type: Int
let isoType: Int
}
The result is "Parsed property list number <2.4> does not fit in Float."
Edit: the parsing method:
let decoder = PropertyListDecoder()
return try! decoder.decode(PresetData.self, from: data)
Which kinda does not make sense for me. Any idea what is wrong?
