And*_*eem 2 iphone realm ios swift
我正在尝试从Realm数据库获取数据。我正在使用NSPredicate。而且运作良好。但是今天,我必须从具有字符串ID的对象中获取数据。此ID在UUID中。因此,无论何时我尝试使用UUID(字符串ID)获取值,都会给我这样的错误
无法解析格式字符串“ Id == BD1698EE-C57D-4B8D-9D54-1D4403B2136F”'
这是错误声明。而我在代码中有以下几行。
let resultPredicateShoppingListDetail = NSPredicate(format: "Id == \(shoppingListModel.Id)")
Run Code Online (Sandbox Code Playgroud)
这对我来说没有意义。为什么会这样呢?
不要使用字符串插值来构建一个谓语形式,这是非常 难以得到必要的引用正确。例如,这可以工作(请注意附加的单引号):
let uuid = "BD1698EE-C57D-4B8D-9D54-1D4403B2136F"
print(NSPredicate(format: "id == '\(uuid)'"))
// id == "BD1698EE-C57D-4B8D-9D54-1D4403B2136F"
Run Code Online (Sandbox Code Playgroud)
但如果uuid字符串包含单引号,也会失败。
最好%@对字符串使用var arg替换:
let uuid = "BD1698EE-C57D-4B8D-9D54-1D4403B2136F"
print(NSPredicate(format: "id == %@", uuid))
// id == "BD1698EE-C57D-4B8D-9D54-1D4403B2136F"
Run Code Online (Sandbox Code Playgroud)
在您的情况下(假设shoppingListModel.Id是a String或NSString):
let resultPredicateShoppingListDetail = NSPredicate(format: "Id == %@", shoppingListModel.Id)
Run Code Online (Sandbox Code Playgroud)
更好的是,使用%Kkeypath var arg替换和#keyPath
编译器指令来插入正确的密钥路径:
let resultPredicateShoppingListDetail = NSPredicate(format: "%K == %@",
#keyPath(ShoppingList.Id), shoppingListModel.Id)
Run Code Online (Sandbox Code Playgroud)
有关谓词%K及其%@谓语的更多信息,请参见
“谓词编程指南”中的“谓词格式字符串语法”。
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |