我想在任何两个符合相同协议的对象之间进行映射。这将是方便的通过功能与签名可以这样做:Swift在协议一致性类型之间的映射
func mapFrom<T>(objectA: T, to inout objectB: T)
更妙的是,虽然(恒定类型)将是有它的形式:
func map<T, U: T>(from source: T) -> U
在那里不知它可以初始化一个U
对象来自T
中的值。
我想通过Swift Reflection而不是使用Objective-C
运行时执行此操作,但如果这是唯一的方法,我会解决这个问题。如果不知怎的,它可以做到没有反射,这将是惊人的,但我不知道如何。
我想这样做的原因是因为我有可变的Realm类符合其各自的协议,我想将它们映射到不可变的结构类型。
一个例子是:
/**
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
}
我想能够有一个通用的函数或方法,用以映射FoodEntity
到FoodProduct
而无需手动执行类似:
FoodProduct(name: entity.name, weight: entity.weight, price: entity.price)
如果可以做到这一点,该怎么办?
你的问题很混乱。请编辑。 –
这可能有助于开始:http://stackoverflow.com/a/24069875/3141234 – Alexander