С помощью CaseIterable
CodingKeys
enum и Mirror
я могу практически реализовать версию с проверкой типа во время выполнения для compiler-magic Encodable
. Почти, но не совсем, потому что из значения CodingKey
я не могу вернуться к имени регистра enum, которое мне нужно, чтобы найти соответствующее значение через Mirror(reflecting: myEncodable)
.
enum CodingKeys: String, CodingKey {
case defaultName // default: .stringValue is also the myEncodable member name
case nonDefaultName = "some-other-name" // .stringValue is not the myEncodable name, no access to "nonDefaultName"
}
Я бы ожидал, что смогу найти название дела с помощью Mirror(reflecting: CodingKeys.nonDefaultName)
, но это не так.
- Я что-то упустил? Возможно ли это на самом деле с помощью Mirror? (Между прочим, я все еще на Xcode 9, притворяясь
CaseIterable
, пока не получу реальную вещь.)
- Есть ли альтернативные способы достижения одной и той же цели (гарантировать, что все члены, упомянутые в
CodingKeys
, будут проверены на объекте и доставлены в Encoder
)?