gpt4 book ai didi

swift - 在 Realm 中查询 Int 时值无效

转载 作者:搜寻专家 更新时间:2023-11-01 06:27:25 24 4
gpt4 key购买 nike

我有一个这样的 Realm 声明:

@objc dynamic var roomId = UUID().uuidString
@objc dynamic var roomName = ""
@objc dynamic var roomType = ""
@objc dynamic var floor = 1
@objc dynamic var placeId : String?

我正在尝试使用此功能从 Realm 数据库查询特定地点特定楼层的所有房间:

static func getAllRoomNamesAndTypesForQuery (placeName: String? ,room : String? , floor : Int?) -> [[String]] {
var result : [[String]] = [[]]
if placeName != nil , floor != nil {
let placeId = Places.specificPlaceQueries(placeName: placeName)[0] as! String
let allRooms = Users.realm.objects(Rooms.self).filter("placeId == '\(placeId)' AND floor == '\(floor!)'")
var roomNames = [""]
var roomTypes = [""]
for number in 0..<allRooms.count {
roomNames.append(allRooms[number].roomName)
roomTypes.append(allRooms[number].roomType)
}

let sortedRoomNames = roomNames.sorted()
let sortedRoomTypes = roomTypes.sorted()

result = [sortedRoomNames , sortedRoomTypes]
}
return result

}

但它一直向我显示以下奇怪的错误

Expected object of type int for property 'floor' on object of type 'Rooms', but received: 1

我不知道它是如何拒绝 1 作为 Int 的?有谁知道这里的问题在哪里??

最佳答案

在创建 NSPredicate 时不应该使用字符串插值,因为即使支持它,也很容易弄乱谓词格式。只需使用 %@ 将变量值替换到谓词中即可。

let allRooms = Users.realm.objects(Rooms.self).filter("placeId == %@ AND floor == %@",placeId, floor)

对代码的一些进一步改进:不要使用 nil 检查,然后强制解包,在使用 Optionals 时使用可选绑定(bind)。

if let placeName = placeName , let floor = floor {

同样,在创建数组时不要给数组添加初始值,而不是 var roomNames = [""]var roomTypes = [""],做

var roomNames = [String]()
var roomTypes = [String]()

关于swift - 在 Realm 中查询 Int 时值无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52292228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com