SQLite.swift — невозможно индексировать значение типа Row. Свифт 2

Этот метод работал, пока я использовал Swift 1.2. Но теперь мне пришлось обновиться до Xcode, и мне пришлось переключить свой язык на Swift 2. Это метод из swift 1.2, который я хорошо использовал;

static func findById(idToFind : Int64) -> T? {

    let query = table.filter(id == idToFind)
    var results: Payment?
    if let item = query.first {

        results : T = Payment(id: item[id], imageName: item[image], type: item[type], deliveredPriceStr: item[deliveredPrice], orderID: item[orderId])


    }

    return results

}

Теперь я модифицировал его для Swift 2, но не смог;

 static func findById(idToFind : Int64) -> T? {

        let query = table.filter(id == idToFind)

        do {
            let query = try table.filter(id == idToFind)
            let item  = try SQLiteDataStore.sharedInstance.SADB.pluck(query)

            if try item != nil {

                let results : T = Payment(id: item[id], imageName: item[image], type: item[type], deliveredPriceStr: item[deliveredPrice], orderID: item[orderId])

            } else {

                print("item not found")

            }
        } catch {

            print("delete failed: \(error)")

        }
    }


        return results

    }

И я получаю эту ошибку: «Невозможно подписать значение типа Row». Тип данных моего элемента, похоже, изменился на Row. Как я могу разобрать его? Что я должен делать ?

PS: я использую ветку swift2.


person letitbefornow    schedule 12.10.2015    source источник


Ответы (1)


Наконец-то я понял, как получить значения. Теперь у элемента строки есть метод get в ветке swift-2. Итак, новый метод ;

static func findById(idToFind : Int64) -> T? {

    let query = table.filter(id == idToFind)
    var  results : T?


    do {
        let query =  table.filter(id == idToFind)
        let item  =  SQLiteDataStore.sharedInstance.SADB.pluck(query)

        if try item != nil {

            results = Payment( id: (item?.get(id))!, imageName: (item?.get(image))!, type: (item?.get(type))!, deliveredPriceStr: (item?.get(deliveredPrice))!, orderID: (item?.get(orderId))!)

        } else {

                print("item not found")

        }
    }
    catch {

        print("delete failed: \(error)")

    }

    return results

}

Надеюсь, что это кому-то поможет.

person letitbefornow    schedule 13.10.2015