使用操場來模擬基於核心數據的應用程序的問題已成爲一個我似乎無法理解的問題。NSManagedObjects數組並減少函數編譯但在運行時失敗
class Pole {
var length: NSNumber!
}
var poles: [Pole] = []
let pole1 = Pole()
pole1.length = 1
poles.append(pole1)
let pole2 = Pole()
pole2.length = 2
poles.append(pole2)
var sum = poles.reduce(0) { $0 + $1.length } // error Could not find member 'length'
命名長度的屬性(屬性)是NSNumber,因爲它在NSManagedObject類(實體)中。
從NSNumber更改類型!到詮釋!允許該線在操場上正確編譯和運行。
離開類型爲NSNumber!並更改違規線如下:
var sum = poles.reduce(0) { $0 + Int($1.length) }
也編譯和正確運行在操場上。下一步,使用實際的NSManagedObject實體和屬性編譯,將其傳遞給應用程序,但在運行時失敗。失敗是「解開零」。
因此,底線我無法弄清楚如何使用reduce函數,當屬性是一個NSNumber並將其轉換爲一個Int似乎不可接受。
'{ $ 0 + Int($ 1.length ?? 0)}'有效嗎?如果是,則長度實際上是「零」。 – rintaro 2014-12-02 04:35:14
加入?? 0導致編譯錯誤(Int不能轉換爲CGFloat) – jrubl9427 2014-12-02 05:05:36
我認爲它失敗了,因爲我還沒有想出如何將長度轉換爲整數,並且該屬性不能作爲NSNumber找到,因此在解包時爲零。我明顯不清楚發生了什麼。 – jrubl9427 2014-12-02 05:10:15