首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift2.3: NSMutableDictionary存储来自sqlite的整数

Swift2.3: NSMutableDictionary存储来自sqlite的整数
EN

Stack Overflow用户
提问于 2016-10-23 05:34:07
回答 1查看 106关注 0票数 0

事实上,我不知道什么是NSMutableDictionary,但我似乎需要它

顺便说一句,我使用xcode 8并附带了Speed2.3。

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

那么,错误就在这里。

http://imgur.com/a/Gbrp0

代码语言:javascript
复制
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.

我应该做些什么来编辑这段代码?我希望这个错误能消失。

代码语言:javascript
复制
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")
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-23 06:52:12

sqlite3_column_int()返回一个"C整数“,它是Swift中的Int32。若要将其转换为Int,只需使用

代码语言:javascript
复制
let recipeIsFavor = sqlite3_column_int(statement, 3)
let recipe_isFavor = Int(recipeIsFavor)

除了使用NSMutableDictionaryNSMutableArray之外,您还可以使用[String: AnyObject]类型的Swift字典数组(或者Swift 3中的[String: Any] ),然后如下所示:

代码语言:javascript
复制
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")
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40199900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档