Ich möchte zwischen zwei beliebigen Objekten zuordnen, die dem gleichen Protokoll entsprechen. Es wäre praktisch so über eine Funktion mit der Signatur zu tun:Mapping in Swift zwischen protokollkonformen Typen
func mapFrom<T>(objectA: T, to inout objectB: T)
Noch besser ist aber (für unveränderliche Typen) wäre es in Form zu haben:
func map<T, U: T>(from source: T) -> U
wo irgendwie konnte es initialisieren ein U
Objekt aus den Werten in T
.
Ich möchte dies über Swift Reflection anstatt mit der Objective-C
Laufzeit tun, aber ich würde mich damit zufrieden geben, wenn es der einzige Weg war. Wenn es irgendwie ohne Reflexion möglich wäre, wäre das erstaunlich, aber ich sehe nicht wie.
Der Grund, warum ich das tun möchte, ist, weil ich veränderbare Realm-Klassen habe, die ihrem jeweiligen Protokoll entsprechen, und ich möchte sie den unveränderlichen Strukturtypen zuordnen.
Ein Beispiel wäre:
/**
The protocol.
*/
protocol Food {
var name: String { get }
var weight: Float { get }
var price: Float { get }
}
/**
The mutable Realm class representation.
*/
final class FoodEntity: Object, Food {
dynamic var name = ""
dynamic var weight = 0.0
dynamic var price = 0.0
}
/**
The final struct I want to map to from the Realm representation.
*/
struct FoodProduct: Food {
let name: String
let weight: Float
let price: Float
}
ich mit denen eine generische Funktion oder Methode zu haben, in der Lage sein möchte ein FoodEntity
auf ein abzubilden FoodProduct
ohne manuell wie etwas zu tun zu haben:
FoodProduct(name: entity.name, weight: entity.weight, price: entity.price)
Wie kann dies getan werden, wenn es überhaupt möglich ist?
Ihre Frage ist so verwirrend. Bitte bearbeiten. –
Dies kann helfen, zu beginnen: http://stackoverflow.com/a/24069875/3141234 – Alexander