【问题标题】:Swift2.3: NSMutableDictionary store integer from sqliteSwift2.3:NSMutableDictionary 存储来自 sqlite 的整数
【发布时间】:2016-10-23 05:34:07
【问题描述】:

其实我不知道什么是NSMutableDictionary,但是好像需要它

顺便说一句,我使用 xcode 8 和 swift 2.3。

我正在从 sqlite 向这个数组添加一个整数,但这是错误的 其他都是字符串,所以这里没有问题。

那么,错误就在这里

http://imgur.com/a/Gbrp0

let recipeIsFavor = sqlite3_column_int(statement, 3)
let recipe_isFavor = Int.fromCString(UnsafePointer<CInt>(recipeIsFavor))  //<--------I wnat to use int here, but I have no idea.

我应该怎么做才能编辑这段代码?我希望这个错误可以消失。

func loadData() {

    let db_path = NSBundle.mainBundle().pathForResource("Recipes", ofType: "db")
    var db = COpaquePointer()
    let status = sqlite3_open(db_path!,&db)
    if (status == SQLITE_OK) {
        print("Open the sqlite success!\n")
    }else {
        print("Open the sqlite failed!\n")
    }

    let query_stmt = "SELECT * FROM recipe"
    if(sqlite3_prepare_v2(db , query_stmt, -1, &statement, nil) == SQLITE_OK) {
        self.data.removeAllObjects()
        while (sqlite3_step(statement) == SQLITE_ROW) {
            let recipeArray = NSMutableDictionary()

            let recipeName = sqlite3_column_text(statement, 0)
            let recipe_name = String.fromCString( UnsafePointer<CChar>(recipeName))

            let recipeType = sqlite3_column_text(statement, 1)
            let recipe_type.......

            let recipeImage = sqlite3_column_text(statement, 2)
            let recipe_image.......

            let recipeIsFavor = sqlite3_column_int(statement, 3)
            let recipe_isFavor = Int.fromCString(UnsafePointer<CInt>(recipeIsFavor))  //<--------I wnat to use int here, but I have no idea.

            let recipeUserPhoto = sqlite3_column_text(statement, 4)
            let recipe_userPhoto....

            let recipeUserName = sqlite3_column_text(statement, 5)
            let recipe_userName.......

            recipeArray.setObject(recipe_name!, forKey: "recipeName")
            recipeArray.setObject(recipe_type!, forKey: "recipeType")
            recipeArray.setObject(recipe_image!, forKey: "recipeImage")
            recipeArray.setObject(recipe_isFavor!, forKey: "recipIsFavor")
            recipeArray.setObject(recipe_userPhoto!, forKey: "recipUserPhoto")
            recipeArray.setObject(recipe_userName!, forKey: "recipUserName")

            data.addObject(recipeArray)
        }

        sqlite3_finalize(statement)
    }else {
        print("read the sqlite data failed")
    }

}

【问题讨论】:

    标签: swift sqlite swift2.3


    【解决方案1】:

    sqlite3_column_int() 返回一个“C 整数”,在 Swift 中为 Int32。 要将其转换为 Int,只需使用

    let recipeIsFavor = sqlite3_column_int(statement, 3)
    let recipe_isFavor = Int(recipeIsFavor)
    

    你可以用 NSMutableDictionary 和 NSMutableArray 代替 还使用类型的 Swift 字典数组 [String: AnyObject](或 Swift 3 中的 [String: Any]), 那么它看起来像这样:

    var data: [[String: AnyObject]] = []
    
    let query_stmt = "SELECT * FROM recipe"
    if sqlite3_prepare_v2(db , query_stmt, -1, &statement, nil) == SQLITE_OK {
        data = []
        while (sqlite3_step(statement) == SQLITE_ROW) {
            var dict: [String: AnyObject] = [:]
    
            let recipeName = sqlite3_column_text(statement, 0)
            let recipe_name = String.fromCString(UnsafePointer<CChar>(recipeName)) ?? ""
    
            let recipeIsFavor = sqlite3_column_int(statement, 3)
            let recipe_isFavor = Int(recipeIsFavor)
    
            // ...
    
            dict["recipeName"] = recipe_name
            dict["recipIsFavor"] = recipe_isFavor
            // ...
    
            data.append(dict)
        }
        sqlite3_finalize(statement)
    } else {
        print("read the sqlite data failed")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多