Проблемы с проверкой наличия значения в Swift 2
Я пишу приложение для викторины, и есть табличное представление для добавления темы (имя сохраняется в основных данных), и когда вы выбираете путь индекса, он передает субъект в контроллер подробного представления (это прекрасно работает сам по себе) но у меня проблемы с проверкой, чтобы увидеть, существуют ли какие-либо карты (у субъекта есть NSOrderedSet "Cards"). Я продолжаю терпеть крах на двух моих попытках, я сделал это быстро с отношениями и tableViews, и это всегда было хорошо, поэтому я не уверен, в чем проблема здесь. Спасибо за помощь как всегда!
Моя первая попытка, хотя она говорит: "блок catch недоступен, потому что в блоке do нет ошибок", но после "do" в строке выдается "Bad Instruction"
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
}
Моя четвертая попытка, разворачивая как свойство субъекта, так и субъект, не вызывает самоконтроля, но все равно вылетает
if let firstCard = self.subject!.cards?[0] as? Card {
self.currentCard = firstCard
}
Где объявлены свойства
var draggableView = DraggableView!()
var subject : Subject?
var currentCard : Card?
var cardArray = [Card]()
Обновление с методом subject (работает отлично, но поместите его здесь только для справки), тема передается из другого класса, и этот метод, вызываемый в верхней части представления, загружен.
func updateWithSubject(subject: Subject) {
if let subject = self.subject {
self.subject = subject
}
}
2 ответа
Во всех четырех ваших попытках вы делаете "принудительное" развертывание (!
) в какой-то момент, чего в целом следует избегать. Кроме того, вы пытаетесь получить доступ к индексу 0
в вашем NSOrderedSet
; если набор пуст, доступ к [0] приведет к исключению времени выполнения.
Вместо этого вы можете использовать .array
представление NSOrderedSet
и использовать .first
(необязательно) свойство массива для проверки безопасного доступа:
if let firstCard = self.subject?.cards?.array.first ...
Я думаю, что в твоей updateWithSubject
метод. Вы проверяете, есть ли предмет, который уже инициализирован, прежде чем назначить его. Если это в вашем viewDidLoad
и только там, назначение никогда не произойдет. Последующая принудительная распаковка, безусловно, потерпит неудачу после.