Вы можете использовать зеркало:
let pref = User_notification_preferences(comments: true, likes: false, dislikes: nil, unfollow: true, follow: nil, updates: false)
let prefMirror = Mirror(reflecting: pref)
var switchStatus: [String:Bool] = [String:Bool]()
prefMirror.children.forEach { child in
guard let label = child.label else {
fatalError("Couldn't get the label")
}
switchStatus[label] = child.value as? Bool ?? false
}
print(switchStatus) //["follow": false, "updates": false, "unfollow": true, "dislikes": false, "likes": false, "comments": true]
Это будет работать, даже если вы измените свойства User_notification_preferences
.
Или вы можете использовать наивную функцию, подобную этой:
struct User_notification_preferences : Codable {
//...
func dictionaryRepresentation() -> [String:Bool] {
return ["comments": comments ?? false,
"likes": likes ?? false,
"dislikes": dislikes ?? false,
"unfollow": likes ?? false,
"follow": likes ?? false,
"updates": likes ?? false
]
}
}
И используйте это так:
print(pref.dictionaryRepresentation()) //["follow": false, "updates": false, "comments": true, "likes": false, "dislikes": false, "unfollow": false]