Очень мило, спасибо @Hamish!

зи смой предыдущий вопросовЯ решил подклассNSArrayController для того, чтобы достичь желаемого поведения.

class NSPresetArrayController: NSArrayController {
    override func addObject(_ object: Any) {
        if let preset = object as? Preset {
            super.addObject(["name": preset.name, "value": preset.value])
        } else {
            super.addObject(object)
        }
    }
}

Это работает, но что, если я хотел что-то, что работает для любогоEncodable класс, а не только один с двумя свойствами под названиемname а такжеvalue?

По сути, проблема заключается в создании словаря из класса, где ключами являются имена свойств, а значениями являются значения этих свойств.

Я пытался написать что-то вроде этого:

class NSPresetArrayController: NSArrayController {
    override func addObject(_ object: Any) {
        if let encodableObject = object as? Encodable {
            let data = try! PropertyListEncoder().encode(encodableObject)
            let any = try! PropertyListSerialization.propertyList(from: data, options: [], format: nil)

            super.addObject(any)
        }
    }
}

Тем не менее, я получаю ошибку компиляции:

Cannot invoke 'encode' with an argument list of type '(Encodable)'
1. Expected an argument list of type '(Value)'

Как мне это исправить, чтобы он компилировался?

Ответы на вопрос(1)

Ваш ответ на вопрос