Swift: Могу ли я (проверено во время выполнения) найти соответствующее значение члена CodingKey? - PullRequest
0 голосов
/ 11 сентября 2018

С помощью 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), но это не так.

  1. Я что-то упустил? Возможно ли это на самом деле с помощью Mirror? (Между прочим, я все еще на Xcode 9, притворяясь CaseIterable, пока не получу реальную вещь.)
  2. Есть ли альтернативные способы достижения одной и той же цели (гарантировать, что все члены, упомянутые в CodingKeys, будут проверены на объекте и доставлены в Encoder)?
...