【发布时间】:2018-09-25 05:35:37
【问题描述】:
我已经用一个例子设置了一个游乐场:
enum CarType : Equatable {
case wheeled(wheels: Int)
case flying
public static func ==(lhs: CarType, rhs: CarType) -> Bool {
return lhs.enumName == rhs.enumName
}
var enumName: String {
let stuff = "\(self)".split(separator: "(").first!
return String(describing: stuff)
}
}
var typesPresentAtMyParty = [CarType.wheeled(wheels:4), .wheeled(wheels:4), .flying]
let aKnownType = CarType.flying
if case aKnownType = typesPresentAtMyParty[2] {
print("Was the type")
}
func isPresent(type: CarType, inArray: [CarType]) -> Bool {
return inArray.filter {
if case type = $0 {
return true
}
return false
}.first != nil
}
func isWheeled(inArray: [CarType]) -> Bool {
return inArray.filter {
if case .wheeled = $0 {
return true
}
return false
}.first != nil
}
isPresent(type: .flying, inArray: typesPresentAtMyParty)
isPresent(type: .wheeled, inArray: typesPresentAtMyParty)
这里的最后一行没有编译。虽然我可以做if case .wheeled = $0 忽略关联类型作为检查,但在发送isPresent(type: .wheeled, inArray: typesPresentAtMyParty) 时,我找不到在函数调用isPresent(type: CarType, inArray: [CarType]) 中执行相同操作的方法
有没有一种方法可以编写一个只将枚举的有效模式匹配部分作为参数的函数?
【问题讨论】:
-
您可以简单地为关联值传递零。或者这会干扰平等检查吗?如果是,那么您可能需要考虑重新设计该检查。
-
是的,但随机分配一个值不是我想要的,我不想在其中定义一个值,就像在做检查时一样
if case .wheeled = $0 -
0 不是随机值 :)
-
具有关联值的枚举就像函数一样,如果需要参数,则需要指定。
-
那么在
if case .wheeled = $0的时候为什么不需要指定呢?