【问题标题】:How to save and get data from iOS SQLite database?如何从 iOS SQLite 数据库中保存和获取数据?
【发布时间】:2019-12-10 16:31:00
【问题描述】:

我想从数据库中提取“label”和“slug”字符串。它们在 init 中打印得很好(来自解码器:解码器),但我可能在保存它们时做错了,因为它们在其他任何地方都消失了。

这是我的可解码类

import Foundation
import SQLite

final class AdditionalField : Decodable {

    var label : String?
    var slug : String?
    var data: Any?
    var type: QuestionType?
    var pollQuestion: PollQuestion?

    enum CodingKeys: String, CodingKey {
        case label = "label"
        case slug = "slug"
    }

    required init(from row: Row) {
        label = row[Columns.label]
        slug  = row[Columns.slug]

        if let dataString = data as? String, let data = dataString.data(using: .utf8) {
            self.data = type?.create(from: data)
        }
    }

    required  init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        label = try values.decodeIfPresent(String.self, forKey: .label)
        print(label!)
        print("label")

        slug = try values.decodeIfPresent(String.self, forKey: .slug)
        print(slug!)
        print("slug")
    }
}


extension AdditionalField: SQLTable {

    static var tableName = "AdditionalField"

    enum Columns {
        static let label = Expression<String>("label")
        static let slug = Expression<String>("slug")
    }


    static func createTable(db: Connection) throws {
        try db.run(table.create(ifNotExists: true) { table in
            table.column(Columns.label)
            table.column(Columns.slug)
        })
    }

    static func insert(elements: [AdditionalField]) throws {
        try Database.shared.insert(elements: elements)
    }

    func insert(db: Connection) throws {
        try db.run(AdditionalField.table.insert(or: .replace, [
            Columns.label <- label ?? "",
            Columns.slug  <- slug ?? ""
        ]))
    }

}

我尝试过这样使用它们。也许这就是问题所在?

//   let field = additionalFields?.filter{$0.label == anyTextField.placeholder}.first

       // anyTextField.placeholder = field?.label

【问题讨论】:

  • 您没有包含任何试图保存到数据库或从数据库中获取的代码。 json解码与你的sql问题有什么关系?

标签: swift sqlite decodable


【解决方案1】:

我创建了一个名为SundeedQLite的库

请随意尝试!

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 2018-01-30
    • 2013-05-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2013-11-02
    相关资源
    最近更新 更多