2016-11-02 8 views
0

私は、次のスウィフト2.xの構文を持っているスイフト3.0変換の問題:私はSWIFT 3.0に私のコードを変換しようとしているスウィフト2.xの - > String.fromCString

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

。しかし、私はこの声明を働かせることはできません。現在、私は次のようしているが、その私を与える:「タイプの非オプションの値に、オプションのチェーンを使用することはできません 『文字列』」スウィフト3で

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

疑問符を削除します。 –

+0

@CleverError '条件付きバインディングの初期化子には、 'String'ではなく、オプションの型が必要です – user594883

答えて

2

String(cString:)がオプションを返さない:

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

無効なUTF-8バイトは、Unicode置換文字 U + FFFDに置き換えられます。

あるいは(入力が有効なUTF-8シーケンスでない場合nil )オプションを返すString(validatingUTF8:)を使用します。

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

あなたは本当に速いです!詳細については、CStringの拡張機能 - > https://github.com/apple/swift/blob/master/stdlib/public/core/CString.swiftをご覧ください。 –

関連する問題