swift - 检查字典是否包含 Swift 中的值

标签 swift nsdictionary nspredicate

只是简单的任务。我有一个字典 var types = [Int : String]() 初始化时像一个空的,在一些用户操作后它填充了数据。根据这本词典中的空白或一些特定数据,我在 UI 中启用/禁用一个按钮。 检查是否为空很容易,但是如何检查字典是否包含某个值呢? 编译器建议我使用谓词占位符:

types.contains(predicate: ((Int, String)) throws -> Bool>)

最佳答案

由于您只想检查给定的 是否存在,您可以对字典的 values 属性应用 contains 方法(给定 native Swift 字典),例如

var types: [Int : String] = [1: "foo", 2: "bar"]
print(types.values.contains("foo")) // true

@njuri: answer 中所述,使用字典的 values 属性似乎会产生开销(我自己还没有验证过)w.r.t.只需根据每个 Dictionary 元素的键值元组中的值条目直接检查 contains 谓词。因为 Swift 很快,所以这应该不是问题,但是,除非你正在使用一个巨大的字典。无论如何,如果您想避免使用 values 属性,您可以查看上述答案中给出的替代方案,或者使用另一种替代方案(Dictionary 扩展)如下:

extension Dictionary where Value: Equatable {
  func containsValue(value : Value) -> Bool {
    return self.contains { $0.1 == value }
  }
}

types.containsValue("foo") // true
types.containsValue("baz") // false

关于swift - 检查字典是否包含 Swift 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38451252/

相关文章:

swift - 如何在swift的泛型类中定义静态常量?

objective-c - 访问应由JSON创建的NSDictionary中的 key 时崩溃

iphone - 如何在 NSSet 或 NSArray 中搜索具有特定属性的特定值的对象?

iphone - 在谓词中使用@min、@max 等?

objective-c - 包含来自关系的对象的 NSFetchedResultsController

ios - 将 Swift 属性观察器转换为 ObjC

ios - 我无法恢复我取消选择的前一个单元格的属性

ios - 如何在 swift 中使用 MR 从 coreData 获取数据

swift - 如何在 Swift 中按数组计数对 Firebase NSDictionary 项进行分组?

iphone - 如何在iphone-sdk中的给定索引处插入对象