Неверное значение при запросе Int в области - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть объявление области:

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

Я пытаюсь получить запрос всех комнат для определенного этажа в определенном месте из БД областей с помощью этой функции:

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

}

но он продолжает показывать мне следующую странную ошибку

Ожидаемый объект типа int для свойства 'floor' объекта типа «Номера», но получил: 1

Я не знаю, как он отклоняет 1 как Int ?? Кто-нибудь знает, где здесь проблема?

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Первый:

установить это

var roomNames = [""];
var roomTypes = [""];

к этому

var roomNames = [String]()
var roomTypes = [String]()
0 голосов
/ 12 сентября 2018

Не следует использовать строковую интерполяцию при создании NSPredicate с, поскольку, хотя она поддерживается, действительно легко испортить формат предиката.Просто используйте %@ для подстановки значений переменных в предикат.

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

Некоторые дальнейшие улучшения в вашем коде: не используйте проверку nil, затем принудительное развертывание, используйте необязательную привязку при работе с Optionals.

if let placeName = placeName , let floor = floor {

Также не добавляйте начальное значение к массивам при их создании, вместо var roomNames = [""] и var roomTypes = [""], делайте

var roomNames = [String]()
var roomTypes = [String]()
0 голосов
/ 12 сентября 2018

Можете ли вы попробовать

let allRooms = Users.realm.objects(Rooms.self).filter { 
   $0.placeId == placeId  
   && $0.floor == floor 
}
...