【发布时间】:2018-06-22 07:54:40
【问题描述】:
我有结构数组,但我真的不知道如何通过结构的参数之一使用搜索。
我的结构看起来像:
struct Actor {
var name: String!
var posterURL: String!
init(_ dictionary: [String: Any]) {
name = dictionary["name"] as! String
posterURL = dictionary["image"] as! String
}
}
所以,我尝试使用谓词
let actorSearchPredicate = NSPredicate(format: "name contains[c] %@", text)
filterredActors = (actors as NSArray).filtered(using: actorSearchPredicate)
但是,当我尝试输入任何内容时,它会因错误而崩溃
[<_SwiftValue 0x10657ffb0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.'
在结构中使用谓词搜索的正确方法是什么? 谢谢
【问题讨论】:
-
为什么要打扰
NSPredicate?actors.filtered{ $0.name.contains(text) } -
$0.name.contains(text)唯一缺少的就是不区分大小写。 -
不区分大小写的一种非常简单的方法是
$0.name.lowercased().contains(text.lowercased())。 -
你为什么选择
AnyObject?你根本不应该在 Swift 4 中使用它。试试actors.filtered{( $0.name.lowercased().contains(text.lowercased()) )}。此外,filter和filtered之间也存在差异。确保您使用的是filtered。
标签: arrays swift search struct predicate