gpt4 book ai didi

swift - 填充不同类型数据的最佳且最有效的方法

转载 作者:行者123 更新时间:2023-11-30 10:44:51 25 4
gpt4 key购买 nike

我有两个 UICollectionView,并且我将唯一类型的数据(猫、狗)传递给同一个 UIViewController。两种类型都有独特的属性,如 imageUrl、性别、年龄等。根据 TextView 填充此数据的最佳方法是什么?

fileprivate var isDog = false

var detailsData: Any? {
didSet {
if detailsData is Dog {
isDog = true
} else if detailsData is Cat {
isDog = false
}
}
}

override func viewDidLoad() {
super.viewDidLoad()

isDog ? fillDogInfo(detailsData: detailsData as! Dog) : fillCatInfo(detailsData: detailsData as! Cat)
}

fileprivate func fillDogInfo(detailsData: Dog) {
contactButtonOutlet.isHidden = false

// Short Info
if let name = detailsData.name {
shortInfoMutableAttributedString.append("\(name)\n".customAttributedString(font: Font.header, textColor: UIColor.darkGray))
}

if let age = detailsData.age {
shortInfoMutableAttributedString.append("\(age)\n".customAttributedString(font: Font.header, textColor: UIColor.darkGray))
}

shortInfoTextView.attributedText = shortInfoMutableAttributedString
}

fileprivate func fillCatInfo(detailsData: Car) {
contactButtonOutlet.isHidden = true

if let name = detailsData.name {
shortInfoMutableAttributedString.append("\(name)\n".customAttributedString(font: Font.header, textColor: UIColor.darkGray))
}

if let gender = detailsData.gender {
shortInfoMutableAttributedString.append("\(gender)\n".customAttributedString(font: Font.header, textColor: UIColor.darkGray))
}

shortInfoTextView.attributedText = shortInfoMutableAttributedString
}

还有其他方法可以用更少的代码填充这些数据吗?

最佳答案

多态性的一个经典案例,您应该创建一个协议(protocol)并让 Dog 和 Cat 类实现它。然后你就可以调用这个协议(protocol)实例上的函数了。

下面是一个简化的示例。在此示例中,进行区分没有意义,因为 CatDog 在属性方面是同一类。如果您想进行区分,这会变得很有趣,例如仅向 Dog 类添加 bark() 函数

protocol Pet{
var name: String { get set}
func infoString() -> String
}

class Dog: Pet{
var name: String
var age: Int

init(name: String, age: Int) {
self.name = name
self.age = age
}

func infoString() -> String {
return "Dog \(name) has age \(age)"
}
}

class Cat: Pet{
var name: String
var gender: String

init(name: String, gender: String) {
self.name = name
self.gender = gender
}

func infoString() -> String {
return "Cat \(name) has gender \(gender)"
}
}


fileprivate func fillPetInfo(pet: Pet){
textView.text = pet.infoString()
}

let dog = Dog(name: "Ruffer", age: 8)
fillPetInfo(pet: dog)

关于swift - 填充不同类型数据的最佳且最有效的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55951366/

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