У меня есть 2 segues в той же readyForSegue, один подключается к подклассу UIViewController, а другой подключается к подклассу UICollectionViewController. Я пытаюсь использовать переключатель/case с полиморфизмом для установки моего целевогоViewController, но downcast, который я делаю внутри коммутатора, не виден вне его, он продолжает видеть var как UIVC, как было объявлено первоначально. Что я здесь делаю неправильно? Ошибка «Значение типа„UIViewController“не имеет ни один из членов„контекста“»Не могу я опуститься внутри переключателя? (Swift 3)
let identifier: String!
var destinationTest: UIViewController!
switch identifier {
case "Add Exercise":
destinationTest = segue.destination as! AddExerciseViewController
case "addExerciseInCollectionView":
destinationTest = segue.destination as! AddExerciseCollectionVC
default:
break
}
destinationTest.context = self.context
'destinationTest' объявлен как' UIViewController', так что это все, что у вас будет для переменной. Он может указывать на другие подклассы 'UIViewController', но вы не сможете получить доступ к каким-либо конкретным свойствам/функциям подкласса, используя переменную' UIViewController'. FYI - это не имеет никакого отношения к использованию «switch». – rmaddy
Для кода, с которым вы должны работать, вашим двум классам диспетчера классов необходимо либо поделиться суперклассом (или лучше) реализовать протокол, в котором вводится свойство 'context'. Затем вы можете использовать этот класс/протокол вместо 'UIViewController' как тип' destinationTest' – Paulw11
Хорошо, они оба наследуются от UIViewController, однако свойство контекста объявлено в третьем подклассе UIViewController, подкласса sibling. Я понял, почему даже после опускания эти два контроллера не могут увидеть мою собственность. Я думал, что это проблема с областью внутри коммутатора, LOL. Спасибо, ребята! – sylvia