【问题标题】:Access custom object property while iterating over dictionary在遍历字典时访问自定义对象属性
【发布时间】:2016-07-18 14:59:13
【问题描述】:

我有几个对象

Struct object {
   var title:String?
}

var one = object("green")
var two = object("black")
var three = object("blue")

我还有一本字典

var dict = ["a":[one, two], "b":[three]]

我想要的是遍历字典值并找到从“b”开始的所有对象。

我想像这样的事情

for (key, value) in dict { 
  if value.lowercaseString.containsString(searchText.lowercaseString)
}

但我得到一个错误

value of type [object] has no member 'lowercaseString'

我该如何处理?

【问题讨论】:

  • 您发布的代码不起作用,因为它包含语法错误。请给我们您遇到的问题。
  • value 在这里是 Struct 而不是 String,所以 value.lowercaseString 不起作用。

标签: swift


【解决方案1】:

您正在通过查看键和值来迭代字典。

但值不是字符串,而是字符串数组。

import Foundation

struct object {
    var title:String?
}

var one = object(title:"green")
var two = object(title:"black")
var three = object(title:"blue")

var dict = ["a":[one, two], "b":[three]]

for (key, value) in dict {
    for obj in value {
        if let title = obj.title {
            if title.lowercaseString.containsString(searchText.lowercaseString) {
                // ...
            }
        }
    }

}

【讨论】:

  • 这正是我所需要的。谢谢!
  • 当然,需要稍等
  • 我修复了一些问题。
【解决方案2】:

您的value 是对象“[object]”的数组,但不是字符串,如您上面的代码所定义:

var dict = ["a":[one, two], "b":[three]]

因此,您必须将值处理为 object 的数组以找出您想要的。

for (key, value) in dict {
    let found = value.filter({ (anObject: object) -> Bool in
        return anObject.title!.lowercaseString.containsString("b")
    })

    if (found.count > 0) {
        //you find what you want.
    }
}

【讨论】:

  • 不,我需要在每个值内进行搜索。我需要某种方式来获取每个值元素的属性标题,我可以应用小写字符串
猜你喜欢
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 2013-01-21
  • 2010-09-23
  • 2012-01-08
相关资源
最近更新 更多