gpt4 book ai didi

ios - 如何将属性的类型限制为预定义的两种类型(UIColor 或 CAGradientLayer)

转载 作者:行者123 更新时间:2023-12-01 18:03:30 24 4
gpt4 key购买 nike

我试图严格限制属性(property) filling输入 UIColorCAGradientLayer .我可以制作 UIColorCAGradientLayer符合一些协议(protocol)来实现这一点,但是任何类型都可以符合不需要的协议(protocol)。实现以下目标的最佳方法是什么?

class A {
var filling: (UIColor or CAGradientLayer)
var width: CGFloat
}

class B {
var arrayOfA: [A]

init(arrayOfA: [A] {
self.arrayOfA = arrayOfA
}
}

let bObj1 = B(arrayOfA: [A(filling: UIColor.white, width: 5),
A(filling: CAGradientLayer(), width: 10)]) //allowed

let bObj2 = B(arrayOfA: [A(filling: UIColor.white, width: 5),
A(filling: AnyRandomType(), width: 10)]) //not allowed

最佳答案

这是带有关联值的枚举的一个很好的用例:

enum Filling {
case pureColor(UIColor)
case gradient(CAGradientLayer)
}

您可以使用 Filling作为 filling 的类型:
var filling: Filling

// ...

let bObj1 = B(arrayOfA: [A(filling: .pureColor(.white), width: 5),
A(filling: .gradient(CAGradientLayer()), width: 10)]

要检查填充类型,请使用 switch 语句:
switch filling {
case .pureColor(let color):
...
case .gradient(let layer):
...
}

关于ios - 如何将属性的类型限制为预定义的两种类型(UIColor 或 CAGradientLayer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62482935/

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