基本的に問題はコードのRawRepresentable部分ですが、その値を取得する必要がありますが、プロトコルにキャストする必要があるためrawValueを使用できません。これを回避するには?プロトコルにキャスティングし、値を使用していますか?
0
A
答えて
1
これは、列挙型の外部でassociatedTypeを使用しようとすると問題になると思います。
私はこのようにそれを固定:あなたがINOUTとして辞書を取り、それにrawValueを置くRawRepresentable上の拡張メソッドを追加することができるかもしれません
public protocol Serializable {
func dictionary() -> [String: Any]
}
extension Serializable {
func dictionary() -> [String: Any] {
var result = [String: Any]()
let mirror = Mirror(reflecting: self)
for child in mirror.children {
guard let label = child.label else { continue }
switch child.value {
case let serializable as Serializable:
result[label] = serializable.dictionary()
case let rawRepresentable as RawRepresentable:
let value = rawRepresentable.getValueAsAny()
result[label] = value
default:
result[label] = child.value
}
}
return result
}
}
extension RawRepresentable {
func getValueAsAny() -> Any {
return rawValue as Any
}
}
+0
新しい拡張機能がないクリーナーソリューションが見つからない限り、私はこれを答えとしてマークします – aryaxt
関連する問題
- 1. エンティティ4.0キャスティング値をDateTimeとして
- 2. ios bluetooth GKSessionはどのプロトコルを使用していますか?
- 3. 必須プロトコルはNSObjectプロトコルに準拠していますか?
- 4. キャスティングなしのオブジェクトのメソッドの使用
- 5. キャスティングはどのような保護をしていますか?
- 6. AndroidでJCIFSライブラリを使用しているときにURLでSMBプロトコルを使用しています
- 7. オブジェクトをString []オブジェクトにキャスティングしています..?
- 8. (<T>)ではなく「As」でキャスティングしていますか?
- 9. httpプロキシを使用してAMQPプロトコルを使用できますか?
- 10. クラスは、私は、次のクラス使用していますNSCodingプロトコル
- 11. html - httpプロトコルを使用しないリンク
- 12. 多型/型キャスティングの使用
- 13. ISNULLを使用して値を設定していますか?
- 14. 分散コンピューティングプラットフォームで共通の接続プロトコルを使用していますか?
- 15. GoogleゴーグルとLayarはどのアプリケーション層プロトコルを使用していますか?
- 16. カスタムURL /プロトコルを使用してMonoTouch iPhoneアプリケーションを起動しますか?
- 17. 特にNSObjectのキャスティングのコスト#defineを使用してiOSでキャストする場合
- 18. 送信プロトコルで使用されていないフィールド値
- 19. Pythonを使用してMSNプロトコルとどのようにインターフェースできますか?
- 20. xmppプロトコルを使用してfacebookで認証してチャットします
- 21. チャットアプリケーションがXMPPプロトコルを使用していない - オープンファイアサーバ
- 22. apache httpcomponentとsftpプロトコル - プロトコルを使用できますか?
- 23. カスタムタイプをVB6からC#のList <>にキャスティングしますか?
- 24. プロトコルまたはマルチメソッドを使用してClojureQLを拡張できますか?
- 25. FTPプロトコルを使用してリモートサーバーにファイルをコピーする
- 26. どこで句を使用してプロトコル拡張を使用するか
- 27. プロトコルを個人的に実装していますか?
- 28. httpsプロトコルを使用しているJenkins SVN
- 29. TCP/IPプロトコルを使用しているcのサーバークライアントアプリケーション
。 – zneak