2015-07-02 46 views
-1

我從sqlite表中得到錯誤的值。這是我的代碼我在swift中從sqlite表中得到錯誤的值

代碼:

var arrtribute_Mast_List : NSMutableArray = [] 
    var querySQL = String(format:"SELECT * FROM %@ ORDER BY %@", TABLE_ATTRIBUTE_MASTER, ATTRIBUTE_MASTER_ATTR_ID) 
    var statement:COpaquePointer = nil 
    //querySQL = querySQL.String(NSUTF8StringEncoding, allowLossyConversion: false) 

    if (sqlite3_prepare_v2(database, querySQL, -1, &statement, nil) == SQLITE_OK) { 
     while(sqlite3_step(statement) == SQLITE_ROW) { 
      let name = sqlite3_column_text(statement, 2) 
      let attributeName = String.fromCString(UnsafePointer<CChar>(name)) 
      println("Attribute value = \(attributeName)") 
     } 
     sqlite3_finalize(statement); 

    } 

我得到的輸出:

Attribute value = Optional("Shamitabh") 

需要輸出:

Attribute value = "Shamitabh" 
+0

你不能打開可選的?你的輸出和你想要的輸出基本上是一樣的,只是第一個是可選的。 – Evert

+0

在我的表中列值是「Shamitabh」。但我得到這樣的可選(「Shamitabh」) –

+1

你知道什麼是可選值嗎?什麼解開可選值是什麼? – Evert

回答

0

你得到Optional("Shamitabh")因爲String.fromCString不能保證成功。它可能會失敗,attributeName將爲零。您可以通過使解決這一點,一個隱含展開可選的(如果String.fromCString失敗,這將崩潰):

let attributeName = String.fromCString(UnsafePointer<CChar>(name))! 

..或者你可以這樣做的權利,並檢查值是零使用它之前。例如,像這樣:

if let attributeName = String.fromCString(UnsafePointer<CChar>(name)) { 
     println("Attribute value = \(attributeName)") 
} else { 
     println("Couldn't get the attribute name") 
} 
+0

太棒了!非常感謝你..... –