在Xcode 15中使用Realm List实现不区分大小写搜索
Realm搜索区分大小写问题解决方案
先确认Realm版本与属性类型
- 升级到最新版Realm Swift,旧版本对大小写忽略的支持可能存在bug
- 确保
name属性是标准的String类型,而非自定义字符串类型
改用NSPredicate写法实现忽略大小写查询
有时候SwiftUI的where闭包语法可能存在兼容性问题,换用NSPredicate的方式更可靠:.onChange(of: filterIllus) { value in let predicate = NSPredicate(format: "name CONTAINS[c] %@", value) $illie.where = predicate }其中
CONTAINS[c]的[c]标记就是指定忽略大小写的规则预处理存储与搜索关键词(兜底方案)
如果上述方法都无效,可以在数据存储阶段同步保存小写版本的字段,搜索时统一转小写匹配:- 模型中新增字段:
import RealmSwift class YourQuoteObject: Object { @Persisted var name: String @Persisted var nameLowercased: String // 新增小写存储字段 // 其他属性... } - 存储数据时自动赋值小写字段:
let newObject = YourQuoteObject() newObject.name = "输入的名人姓名" newObject.nameLowercased = newObject.name.lowercased() // 写入Realm... - 搜索时统一转小写匹配:
.onChange(of: filterIllus) { value in let lowercasedQuery = value.lowercased() $illie.where = {$0.nameLowercased.contains(lowercasedQuery)} }
- 模型中新增字段:
内容的提问来源于stack exchange,提问作者Q. Preau
相关产品推荐
相关产品推荐

