无法调用'插入'使用

时间:2015-04-27 07:52:11

标签: sqlite sqlite.swift

将记录插入表中的代码在最新更新之前工作正常,但现在抛出此错误,所以我想知道我做错了什么。

记录插入的示例代码:

   Recipes.insert(Title <- "Chocolate Cake", Description <- "Rich and moist", CookTime <- 20, PictureURL <- "http://w2.fnstatic.co.uk/sites/default/files/pictures/articles/omg-chocolate-cake-7.jpg", VideoURL <- "https://www.youtube.com/watch?v=ZqMqTB7RSjo", Instructions <- "Prepare ingredients into bowl. Whisk for 20 mins, and pour into cake moulding tin. Place in oven at 200C for 15 minutes. Allow 10 mins to cool before icing with chocolate frosting.", Category <- "Desert", Ingredients <- "50g Flour, 200ml Milk, 2 large eggs, Choclate frosting", Favourited <- false)

数据库设置示例:

import Foundation
import SQLite
let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as! String  
let db = Database("\(path)/databasetest.sqlite3")

let Recipes = db["Recipes"]
let RecipeID = Expression<Int>("RecipeID")
let Title = Expression<String>("Title")
let Description = Expression<String>("Description")
let CookTime = Expression<Int>("CookTime")
let PictureURL = Expression<String>("PictureURL")
let VideoURL = Expression<String>("VideoURL")
let Instructions = Expression<String>("Instructions")
let Category = Expression<String>("Category")
let Ingredients = Expression<String>("Ingredients")
let Favourited = Expression<Bool>("Favourited")

func TableSetup() {

db.create(table: Recipes, ifNotExists: true) { t in
    t.column(RecipeID, primaryKey: true)
    t.column(Title)
    t.column(Description)
    t.column(CookTime)
    t.column(PictureURL)
    t.column(VideoURL)
    t.column(Instructions)
    t.column(Category)
    t.column(Ingredients)
    t.column(Favourited, defaultValue: false)
}

我正在使用stephencelis&#39; SQLite.swift项目。 https://github.com/stephencelis/SQLite.swift

1 个答案:

答案 0 :(得分:3)

在以前的SQLite.swift版本中,insert函数有重载,在Swift 1.1中可以用尾随?消除歧义。 Swift删除了此功能,其迁移器将自动删除?,破坏SQLite.swift。

解决方案包括:

  1. 使用!消除歧义(如果语句应该始终成功并且失败时崩溃就可以):

    Recipes.insert(Title <- "Chocolate Cake", …)!
    
  2. 使用if - let消除歧义(并在块中对成功逻辑进行分组):

    if let rowid = Recipes.insert(Title <- "Chocolate Cake", …) {
        // success logic
    }
    
  3. 调用元组成员rowidstatement

    Recipes.insert(Title <- "Chocolate Cake", …).rowid
    
  4. 这是一个常见的混淆点,SQLite.swift最终删除了重载,这意味着现在可以调用insert而无需消除歧义:

    Recipes.insert(Title <- "Chocolate Cake", …)