gpt4 book ai didi

swift - 为什么使用 if 语句匹配枚举时出错

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

<分区>

我在使用枚举时遇到了一个我无法理解的问题。

这里是一个枚举类型的声明:

enum SomeType {
case un
case deux
case trois
}

然后我想用 if 语句匹配单个枚举值:

var testValue: SomeType = .trois

if testValue == .trois {
// Do something
}

一切都很好!

现在我只想向第一个成员值添加一个关联值:

enum SomeType {
case un(Int)
case deux
case trois
}

var testValue: SomeType = .trois

if testValue == .trois {
// Do something
}

if 语句中出现错误:Could not find member 'trois'

这是否意味着枚举只能使用 switch 语句来匹配?

精度
我想要实现的是:“testValue是否具有'trois'的成员值而不考虑关联值”。换句话说,如何仅匹配成员值的枚举。

这里是实现 Airspeed Velocity 的解决方案答案:

// Test equality only on member value
func == (lhs:SomeType, rhs:SomeType) -> Bool {
switch (lhs, rhs) {
case (.un(let lhsNum), .un(let rhsNum)):return true
case (.deux, .deux): return true
case (.trois, .trois): return true
default: return false
}
}

// Test equality on member value AND associated value
func === (lhs:SomeType, rhs:SomeType) -> Bool {
switch (lhs, rhs) {
case (.un(let lhsNum), .un(let rhsNum)) where lhsNum == rhsNum: return true
case (.deux, .deux): return true
case (.trois, .trois): return true
default: return false
}
}

var testValue = SomeType.un(3)


// Tests

if testValue == .un(1) {
println("Same member value")
}


if testValue === .un(3) {
println("Same member value AND same associated contents")
}

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