灵活代码与数据持久化:泛型与 Core Data 应用
1. 泛型为代码增添灵活性
编程中使用泛型并非易事,但它能让代码极具灵活性。使用泛型时,往往需要在程序的简单性和代码的灵活性之间进行权衡。有时,引入一点复杂性是值得的,因为这样可以实现原本无法实现的代码编写方式。
例如,之前提到的 Cow
结构体。为了在 HerbivoreType
协议中指定泛型关联类型,在 Cow
结构体中添加了类型别名。但如果并非所有奶牛都喜欢吃草,有些奶牛可能更喜欢花、玉米或其他东西,使用类型别名就无法表达这种情况。
为了表示每个 Cow
实例可能使用不同的 PlantType
,可以直接为 Cow
结构体添加泛型,示例代码如下:
struct Cow<Plant: PlantType>: HerbivoreType {
var plantsEaten = [Plant]()
}
在 <
和 >
之间,泛型类型名被指定为 Plant
,且该泛型受 PlantType
类型约束,即任何充当 Plant
的类型都必须符合 PlantType
。此时协议会识别到 Cow
有泛型