gpt4 book ai didi

ios - 如何在 iOS 中自己创建的模型类中使用泛型?

转载 作者:行者123 更新时间:2023-11-28 14:29:57 28 4
gpt4 key购买 nike

如何在自己创建的模型类中使用泛型?
我有一个 FeatureListModel 类,其他有 FavoriteModel 类。两者存储相同的属性,唯一的区别是类模型名称不同。

我需要在 ProductDetail Controller 中显示模型属性值。

我如何使用泛型来管理这些东西?

这是我的代码(Swift 4.2):

第一个模型:FavoriteListModel

class FavoriteListModel {

var categoryID: Int?

var item_name: String?

var MRP: String?

}

第二个模型:FeatureListModel

class FeatureListModel {

var categoryID: Int?

var item_name: String?

var MRP: String?

}

我还有 8-10 个属性,但这只是我代码中的一些内容。

Controller - ProductDetailTableViewController

class ProductDetailTableViewController : UITableViewController {

var productDetails: FavoriteListModel!

var productFeatureList: FeatureListModel!

fileprivate func displayProduct() {

if productDetails != nil {

title = productDetails.item_name

categoryID = productDetails.categoryID!

}else if productFeatureList != nil {

categoryID = productFeatureList.categoryID!

title = productFeatureList.item_name

}
}

在我的产品详细信息表 Controller 中,我正在访问模型对象并显示在屏幕上。我不想要 if-else 检查。

最佳答案

您混淆了泛型和协议(protocol)。在您的情况下,协议(protocol)更可取。

ProductDetailTableViewController 中有一个对象响应 item_name 的 getter(顺便说一下,请遵守 camelCased 命名约定 itemName) 和 categoryID。对象的类型以及其他属性和函数的存在并不重要。

创建协议(protocol)

protocol Listable {
var itemName : String { get }
var categoryID : Int { get }
}

然后在你的类中采用该协议(protocol)(你真的需要一个吗?)并至少声明 categoryID 为非可选的,因为你稍后会强制解包该值反正。 不要使用可选项作为不编写初始化程序的借口

class FavoriteListModel : Listable { ...
class FeatureListModel : Listable { ...

ProductDetailTableViewController 中而不是两个属性将一个属性声明为 Listable 而不是 objective-c-ish nil 检查使用可选绑定(bind):

var details: Listable!

fileprivate func displayProduct() {
if let productDetails = details {
title = productDetails.itemName
categoryID = productDetails.categoryID
}
}

关于ios - 如何在 iOS 中自己创建的模型类中使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51336230/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com