enum EnumType {
case WithString(String)
}
var enums = [EnumType]()
enums.append(EnumType.WithString("A"))
enums.append(EnumType.WithString("B"))
enums.append(EnumType.WithString("C"))
enums.append(EnumType.WithString("D"))
enums.append(EnumType.WithString("E"))
enums.append(EnumType.WithString("F"))
如何过滤我的enums
数组来找到一个关联值等于C
的数组。我需要使用什么** predicate **?
6条答案
按热度按时间ldxq2e6h1#
filter函数既可以作为数组上的全局函数调用,也可以作为示例方法调用(我更喜欢后者,因为它更面向对象)。
它接受一个带有一个参数(被求值的元素)的闭包,该参数返回一个布尔值(指示元素是否匹配所需的条件)。
因为它是一个简单的闭包,在一个明确的情况下,可以使用缩写形式。
我猜其他的“With”情况会被添加到枚举中,所以您可以使用类似于以下的内容:
在你的例子中,这应该可以达到目的。
rryofs0p2#
正如有人已经提到的,对于Swift〉2.0,有if case语句可用:
但是,这看起来并不好,特别是如果你要重复同样的逻辑,我们可以做的是使EnumType符合Equatable:
现在您可以:
ffscu2ro3#
你可以尝试添加一个简单的扩展,它带有一个计算属性到你的枚举和过滤器到那个属性:
在此之后,您可以像往常一样简单地使用过滤:
flvlnr444#
这可能可以通过Swift 2.0绑定
if
语句中的关联值来简化。vx6bjr1n5#
受@Jessy和SwiftLee的启发,我的解决方案如下:
lvjbypge6#
通过实现
Equatable
协议,您可以实现更高的可重用性: