Swift中协议一致性类型之间的映射

Swift中协议一致性类型之间的映射,swift,dictionary,reflection,Swift,Dictionary,Reflection,我想在符合相同协议的任意两个对象之间进行映射。通过带有签名的函数执行此操作会很方便: func mapFrom<T>(objectA: T, to inout objectB: T) 我希望能够有一个通用函数或方法,用于将FoodEntity映射到FoodProduct,而无需手动执行以下操作: FoodProduct(名称:entity.name,重量:entity.weight,价格:entity.price) 如果可以的话,这怎么办?我想你正在寻找这样的东西 func fe

我想在符合相同协议的任意两个对象之间进行映射。通过带有签名的函数执行此操作会很方便:

func mapFrom<T>(objectA: T, to inout objectB: T)
我希望能够有一个通用函数或方法,用于将
FoodEntity
映射到
FoodProduct
,而无需手动执行以下操作:

FoodProduct(名称:entity.name,重量:entity.weight,价格:entity.price)


如果可以的话,这怎么办?

我想你正在寻找这样的东西

 func fetchAllFoodProducts() -> [FoodProduct]
    {
        var foodProducts : [FoodProduct] = []

        // Fetch From Realm

        let products = realm.objects(FoodEntity.self)

        for product in products
        {
            foodProducts.append(FoodProduct(name: product.name, weight: product.weight, price: product.price))
        }

        return foodProducts
    }
 func fetchAllFoodProducts() -> [FoodProduct]
    {
        var foodProducts : [FoodProduct] = []

        // Fetch From Realm

        let products = realm.objects(FoodEntity.self)

        for product in products
        {
           foodProducts.append(FoodProduct(entity: product))
        }

        return foodProducts
    }
问题是不可能有一个通用的方法来做到这一点。因为您必须以某种方式分配
name
weight
price
的值。我想这是你能得到的最接近的了

或者你可以这样做

 func fetchAllFoodProducts() -> [FoodProduct]
    {
        var foodProducts : [FoodProduct] = []

        // Fetch From Realm

        let products = realm.objects(FoodEntity.self)

        for product in products
        {
            foodProducts.append(FoodProduct(name: product.name, weight: product.weight, price: product.price))
        }

        return foodProducts
    }
 func fetchAllFoodProducts() -> [FoodProduct]
    {
        var foodProducts : [FoodProduct] = []

        // Fetch From Realm

        let products = realm.objects(FoodEntity.self)

        for product in products
        {
           foodProducts.append(FoodProduct(entity: product))
        }

        return foodProducts
    }
通过稍微改变你的
食物属性

 struct FoodProduct: Food {
        let name: String
        let weight: Float
        let price: Float

        init(entity : FoodEntity)
        {
            self.name = entity.name
            self.weight = entity.weight
            self.price = entity.price
        }
    }

我想你在找这样的东西

 func fetchAllFoodProducts() -> [FoodProduct]
    {
        var foodProducts : [FoodProduct] = []

        // Fetch From Realm

        let products = realm.objects(FoodEntity.self)

        for product in products
        {
            foodProducts.append(FoodProduct(name: product.name, weight: product.weight, price: product.price))
        }

        return foodProducts
    }
 func fetchAllFoodProducts() -> [FoodProduct]
    {
        var foodProducts : [FoodProduct] = []

        // Fetch From Realm

        let products = realm.objects(FoodEntity.self)

        for product in products
        {
           foodProducts.append(FoodProduct(entity: product))
        }

        return foodProducts
    }
问题是不可能有一个通用的方法来做到这一点。因为您必须以某种方式分配
name
weight
price
的值。我想这是你能得到的最接近的了

或者你可以这样做

 func fetchAllFoodProducts() -> [FoodProduct]
    {
        var foodProducts : [FoodProduct] = []

        // Fetch From Realm

        let products = realm.objects(FoodEntity.self)

        for product in products
        {
            foodProducts.append(FoodProduct(name: product.name, weight: product.weight, price: product.price))
        }

        return foodProducts
    }
 func fetchAllFoodProducts() -> [FoodProduct]
    {
        var foodProducts : [FoodProduct] = []

        // Fetch From Realm

        let products = realm.objects(FoodEntity.self)

        for product in products
        {
           foodProducts.append(FoodProduct(entity: product))
        }

        return foodProducts
    }
通过稍微改变你的
食物属性

 struct FoodProduct: Food {
        let name: String
        let weight: Float
        let price: Float

        init(entity : FoodEntity)
        {
            self.name = entity.name
            self.weight = entity.weight
            self.price = entity.price
        }
    }

你的问题太令人困惑了。请编辑。这可能有助于开始:你的问题太令人困惑了。请编辑。这可能有助于开始: