2014-12-27 19 views
0

下面的代碼生成錯誤:無法轉換表達式的類型'()''NilLiteralConverible'?

var err:NSError? 
_persistentStore = _persistentStoreCoordinator!.addPersistentStoreWithType(
      NSSQLiteStoreType, 
      configuration: nil, 
      URL: _coreDataPathURL, 
      options: nil, 
      error: err 
    ) 

生成錯誤:無法轉換表達式的類型 '()' 'NilLiteralConverible'?

_persistentStoreCoordinator是一個可選的var。

我不明白爲什麼會出現錯誤?

+0

在傳遞'error'作爲參數之前,你缺少'&'。 – HAS 2014-12-27 15:52:44

+0

請注意(截至目前)clang提供的錯誤消息在大多數情況下並不真正有用。 – HAS 2014-12-27 15:53:21

回答

1

問題是錯誤類型需要是NSErrorPointer,即指向NSError?的指針。

隱式轉換的NSError?到其中的一個,你可以在err前面粘&

var err:NSError? 
_persistentStore = _persistentStoreCoordinator!.addPersistentStoreWithType(
      NSSQLiteStoreType, 
      configuration: nil, 
      URL: _coreDataPathURL, 
      options: nil, 
      error: &err // <-- 
    ) 

(見the docs獲取更多信息)

生成錯誤是因爲斯威夫特試圖使用NSErrorNilLiteralConvertible初始值設定項,但因爲需要一個類型爲()作爲它的參數而失敗(注意,當Swift無法使任何可能的重載工作時,它通常會給出關於一個特定值的編譯器錯誤可能性,這可能會引起誤解)。

+0

當我發佈這個問題後,我也發現。 – MJ000111 2014-12-28 04:55:23

+0

Swift和Xcode錯誤報告是如此糟糕,我發誓。我遇到了同樣的問題,並且Xcode強調了「configuration:nil」部分是錯誤的,表示類似於「無法轉換表達式的類型'$ T13 ??'鍵入'NilLiteralConvertible'「-_-! – Zhang 2015-01-06 14:11:45

相關問題