我正在寫一個測驗應用程序,並有一個表視圖添加一個主題(名稱保存到核心數據),當您選擇一個索引路徑它通過受到詳細視圖控制器的限制(這個工作本身就很好),但是我遇到的麻煩是檢查是否存在任何卡(主體實體具有「卡」的NSOrderedSet)。在我的兩次嘗試中,我一直在崩潰,我之前用關係和tableViews在swift中完成了它,並且一直很好,所以我不確定這裏存在什麼問題。感謝您一如既往的幫助!問題檢查,看看是否存在一個值Swift 2
我第一次嘗試,雖然它說:「catch塊不可訪問,因爲任何錯誤都是扔在做塊」,它與上線「壞指令」崩潰後「做」
do {
if let firstCard = self.subject?.cards![0] as? Card {
self.currentCard = firstCard
}
} catch {
}
我的第二次嘗試,它崩潰的第一行
if let firstCard = self.subject?.cards![0] as? Card {
self.currentCard = firstCard
}
我的第三次嘗試
if self.subject!.cards != nil {
self.currentCard = self.subject!.cards![0] as! Card
}
我的第四次嘗試,展開雙方的學科屬性和學科,它不會響起self.subject.cards但仍然崩潰
if let firstCard = self.subject!.cards?[0] as? Card {
self.currentCard = firstCard
}
,其中屬性聲明
var draggableView = DraggableView!()
var subject : Subject?
var currentCard : Card?
var cardArray = [Card]()
與標的方法的更新(完美的作品,但把它放在這裏僅供參考),主題是從另一個類傳遞的,並且在視圖頂部調用的這個方法確實加載了。
func updateWithSubject(subject: Subject) {
if let subject = self.subject {
self.subject = subject
}
}
在你嘗試所有四個,你做一個「逼」在某些時候解開('!'),這通常是可以避免的。另外,你也可以使用'.first'(可選)屬性來代替顯式地嘗試訪問數組中的索引'0'。如果你的數組是空的,訪問'[0]'會產生一個運行時異常。你可以試試'如果讓firstCard = self.subject?.cards?.first ...'。 (另外,'Subject'類/結構體的'.cards'屬性不是'Card'對象?想知道類型轉換爲'Card'。) – dfri
它說NSOrderedSet沒有「first」成員,會是什麼將集合轉換爲數組的最佳方法是什麼? – Echizzle
我的不好,我認爲'Subject'的'.cards'屬性是'Card'對象的數組(你沒有向我們展示'Subject'類/結構體......但我現在看到你寫了這個文本)。無論如何,'NSOrderedSet'有一個屬性'.array',_「將有序集合表示爲一個數組。(只讀)」_,所以我想你可以使用'if firstCard = self.subject?.cards ?.array.first ...'。 – dfri