0

我正在为sqlite 库构建一个类,突然编译器永远挂起。

我终于得到了一个测试用例,发现与字典解析有关。这是最小的代码:

导入基础导入GRDB

class DeudaCliente : Record {
    var id: Int64
    var codigo: String
    var nombre: String
    var cobro: String
    var direccion: String
    var telefono: String
    var orden: Int32
    var calificacion: String
    var fechaIngreso: NSDate
    var fecha: NSDate
    var capital: NSDecimalNumber
    var interes: NSDecimalNumber
    var cuota: NSDecimalNumber
    var valor: NSDecimalNumber
    var valorPagar: NSDecimalNumber
    var saldo: NSDecimalNumber
    var atrasados: Int32


    /// Initialize from a database row
    required init(_ row: Row) {
        id = row.value(named: "id")
        codigo = row.value(named: "codigo")
        nombre = row.value(named: "nombre")
        cobro = row.value(named: "cobro")
        direccion = row.value(named: "direccion")
        telefono = row.value(named: "telefono")
        orden = row.value(named: "orden")
        calificacion = row.value(named: "calificacion")
        fechaIngreso = row.value(named: "fechaIngreso")
        fecha = row.value(named: "fecha")
        interes = row.value(named: "interes")
        cuota = row.value(named: "cuota")
        valor = row.value(named: "valor")
        valorPagar = row.value(named: "valorPagar")
        saldo = row.value(named: "saldo")
        capital = row.value(named: "capital")
        atrasados = row.value(named: "atrasados")

        super.init(row)
    }

    /// The values persisted in the database
    override var persistentDictionary: [String: DatabaseValueConvertible?]
    {
        return  [
            "id": id,
            "nombre": nombre,
            "codigo": codigo,
            "cobro": cobro,
            "direccion": direccion,
            "telefono": telefono,
            "orden": orden,
            "calificacion": calificacion,
            "fechaIngreso": fechaIngreso,
            "fecha": fecha, //THE COMPILER SLOWDOWN HERE
            "interes": interes,
            "cuota": cuota, //THE COMPILER HANG HERE
            "valor": valor,
            "valorPagar": valorPagar,
            "saldo": saldo,
            "capital": capital,
            "atrasados": atrasados
        ]
    }
}

奇怪的是,我在键“fecha”之后为标量(如 1、“a”等)更改了编译器工作的值。

另外:在“cuota”和服务SourceKitService开始报告 +300% CPU,增加内存(我数到 6GB)之后,索引也需要永远

这在 El capitan,xcode 版本 7.2.1 (7C1002)

4

1 回答 1

0

我是GRDB的作者。在https://github.com/groue/GRDB.swift/issues/21上阅读我的答案

我猜字典对于 Swift 编译器来说太长了。您可以尝试破坏它,或者在密钥之后构建它,如下所示:

var dic: [String: DatabaseValueConvertible?] = [:]
dic["id"] = id
dic["nombre"] = nombre
// etc.
return dic
于 2016-02-10T22:58:01.327 回答