Sqlite 不透明指针错误Swift 3.1

Sqlite 不透明指针错误Swift 3.1,sqlite,swift3,opaque-pointers,Sqlite,Swift3,Opaque Pointers,我在使用Swift 3.1将外国和国际字符插入或更新到SQLite数据库时遇到问题。 因此,我尝试在下面添加UTF8,但遇到错误“无法将'string'类型的值转换为预期的参数类型'OpaquePointer!'” 我被难住了,不知道该去哪里找 func saveDiveDetails (_ dives: Dives) -> Int32 { let diveLog = AppDelegate.getDLDatabase() let diveBuddy = diveBudd

我在使用Swift 3.1将外国和国际字符插入或更新到SQLite数据库时遇到问题。 因此,我尝试在下面添加UTF8,但遇到错误“无法将'string'类型的值转换为预期的参数类型'OpaquePointer!'”

我被难住了,不知道该去哪里找

func saveDiveDetails (_ dives: Dives) -> Int32 {
    let diveLog = AppDelegate.getDLDatabase()

    let diveBuddy = diveBuddyTextField.text ?? ""
    let diveMaster = diveBuddyTextField.text ?? ""
    let boatName = diveBuddyTextField.text ?? ""
    let diveCenter = diveBuddyTextField.text ?? ""
    let boatOperator = diveBuddyTextField.text ?? ""
    let city = diveBuddyTextField.text ?? ""
    let country = diveBuddyTextField.text ?? ""
    let bodyOfWater = diveBuddyTextField.text ?? ""
    let tripName = diveBuddyTextField.text ?? ""
    var statement: OpaquePointer? = nil

    let update:String = String(format: "UPDATE Dives SET dive_buddy = ?, dive_master = ?, boatName_name = ?, diveCenter_name = ?, boatOperator_name = ?, diveCity_name = ?, bodyOfWater_name = ?, diveCountry_name = ?, tripName_name = ? WHERE id = %d")

    if(sqlite3_prepare_v2(self.dlDatabase.database, update, -1, &statement, nil) == SQLITE_OK){
        sqlite3_bind_text(update, 0, diveBuddy.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT)
        sqlite3_bind_text(update, 1, diveMaster.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT)
        sqlite3_bind_text(update, 2, boatName.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT)
        sqlite3_bind_text(update, 3, diveCenter.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT)
        sqlite3_bind_text(update, 4, boatOperator.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT)
        sqlite3_bind_text(update, 5, city.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT)
        sqlite3_bind_text(update, 6, bodyOfWater.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT)
        sqlite3_bind_text(update, 7, country.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT)
        sqlite3_bind_text(update, 8, tripName.cString(using: String.Encoding.utf8), -1, SQLITE_TRANSIENT)
        sqlite3_bind_int(update, 9, self.diveNumber)
    }

    sqlite3_prepare_v2(self.dlDatabase.database, update, -1, &statement, nil)
    sqlite3_bind_int(statement, 1, Int32(self.diveNumber));
    if sqlite3_step(statement) == SQLITE_DONE {

        print("SQLite saved")
    }
    else {
        let errorMessage = String.init(validatingUTF8: sqlite3_errmsg(dlDatabase.database))!
        print("update failed! \(errorMessage)")
    }
    sqlite3_finalize(statement)
}

我正在每搜索一次,但找不到此类错误的引用。

您不需要将Swift字符串转换为C字符串:

sqlite3_bind_text(update, 1, diveMaster, -1, SQLITE_TRANSIENT)
此外,请注意:sqlite3_bind_xxx函数接受基于1的索引:
sqlite3_bind_text(更新,0,…)
无效。看


参考:

您也可以使用
字符串
类的
.utf8CString
属性进行转换。你能澄清哪一行导致编译错误吗?