Я использую SQLite.Swift в моем iOS приложении. Я просмотрел документы в Github, но не могу удалить элемент из таблицы. Вот что у меня есть:
func insertIntoFavorites(product: Product, completion: @escaping(SQLiteResults) -> Void) {
//Before inserting to the database, we are converting quantities(int array) to a string because SQLite does not support arrays.
let quantityString = Helpers.shared.convertIntArrayToString(array: product.quantities)
let inserted = favoritesTable.insert(
uuid <- product.uuid,
name <- product.productName,
manufacturer <- product.productManufacturer,
image <- product.productImage,
quantity <- quantityString,
amount <- product.amount,
notes <- product.notes,
storeid <- product.storeID,
storename <- product.storeName,
ownerid <- product.ownerID
)
openDatabase()
do {
let rowid = try database.run(inserted)
completion(.insertionSucceeded)
}catch let Result.error(message: _, code: code, statement: _) where code == SQLITE_CONSTRAINT{
//If the item has already been in the database, we should delete it from the database.
let productToDelete = favoritesTable.filter(id == Expression<Int>(rowid))
do {
try database.run(productToDelete.delete())
completion(.deleted)
} catch {
print(error)
}
} catch let error {
//An unknown error, print it and return insertionError.
print(error)
completion(.insertionError)
}
}
По сути, когда пользователь пытается вставить что-то в уже существующую таблицу, я хочу удалить ее.
Я скопировал из документации именно так, как это написано, оно достигает .deleted completion
, но элемент не удаляется. Странно то, что вместо строки productToDelete представляет собой table
. Но так же, как на документах.
Кто-нибудь понял, почему и как я могу заставить его работать? Я видел несколько подобных проблем здесь, но не смог найти ответ.
РЕДАКТИРОВАТЬ: Я подумал, может быть, это потому, что rowid
не входит в область действия catch
, поэтому я попытался иметь переменную функции, присвойте ему rowid
и используйте его вот так, но все равно ничего.