2016-11-02 1 views
0

Ich habe folgende Swift 2.x Syntax:Swift 2.x -> Swift 3.0 Umwandlung Problem mit String.fromCString

if let columnType = String.fromCString(sqlite3_column_decltype(pStmt, i))?.uppercased() { 

Ich versuche, meinen Code swift 3.0 zu konvertieren. Jedoch kann ich diese Aussage nicht zum Funktionieren bringen. Ich habe zur Zeit die folgenden aber sein gibt mir:

if let columnType = String(cString: sqlite3_column_decltype(pStmt, i))?.uppercased() { 
+0

Entfernen Sie die Fragezeichen. –

+0

@CleverError 'Initialisierer für bedingte Bindung muss optionalen Typ haben, nicht 'String'' – user594883

Antwort

2

String(cString:) in Swift 3 zurückkehren "optional Verkettungs nicht auf nicht-optionalen Wert vom Typ 'String' verwenden können" nicht optional:

let columnType = String(cString: sqlite3_column_decltype(pStmt, i)).uppercased() 

Ungültige UTF-8-Bytes werden durch das Unicode-Ersatzzeichen U + FFFD ersetzt.

Oder verwenden String(validatingUTF8:) die gibt einen optional (nil , wenn der Eingang keine gültige UTF-8-Sequenz ist):

if let columnType = String(validatingUTF8: sqlite3_column_decltype(pStmt, i))?.uppercased() { 
    // ... 
} 
+0

Sie sind wirklich schnell! Wenn Sie weitere Informationen benötigen, werfen Sie einen Blick auf die CString-Erweiterung -> https://github.com/apple/swift/blob/master/stdlib/public/core/CString.swift –