gpt4 book ai didi

swift - 切换以匹配来自 OptionSetType 的多个案例

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:40 24 4
gpt4 key购买 nike

我有一个 struct Person extends OptionSetType。在后面的代码中,如何使用 switch 语句来检查 Person 的实例是否有多个值?

谢谢

struct Person: OptionSetType {
let rawValue: Int
init(rawValue: Int){
self.rawValue = rawValue
}

static let boy = Person(rawValue: 1 << 0)
static let young = Person(rawValue: 1 << 1)
static let smart = Person(rawValue: 1 << 2)
static let strong = Person(rawValue: 1 << 3)
}

//later declared
var him: Person!

//later initialised
him = [.boy, .young]

//now test using a switch block
Switch (him) {
case .boy & .young // <----- How do you get this to work?

}

怎么考他==年轻力壮?
如何测试他包含年轻和男孩?

最佳答案

OptionSetTypeSetAlgebraType 的子类型,因此您可以使用集合代数方法来测试一个选项组合与另一个选项的组合。取决于您想问什么(以及所讨论的集合是什么),可能有多种方法可以做到这一点。

首先,我将要查询的属性放在本地常量中:

let youngBoy: Person = [.Young, .Boy] 

现在,将其用于一种运行良好的测试:

if him.isSupersetOf(youngBoy) {
// go to Toshi station, pick up power converters
}

当然,这里具体问的是him是否包含youngBoy中列出的所有选项。这可能就是您所关心的,所以这很好。如果您稍后扩展 Person 也有其他选项,这也是安全的。

但是,如果 Person 有其他可能的选项,并且您想断言 him 包含完全 youngBoy 中列出的选项怎么办,没有其他的? SetAlgebraType 扩展了 Equatable,因此您可以使用 == 进行测试:

if him == youngBoy {
// he'd better have those units on the south ridge repaired by midday
}

顺便说一句,您不想为此使用switch 语句。 Switch 用于从几种可能的情况中选择一种(是 A 还是 B?),因此使用它来测试组合(是 A、B、A 和 B,还是两者都不是?)会使您的代码变得笨拙。

关于swift - 切换以匹配来自 OptionSetType 的多个案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34358076/

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