2016-01-26 2 views
1

Добрый день!Население пункта назначения readyForSegue для обратного вызова через возвращаемый тип

Я относительно новичок в Swift, хотя я думаю, что мне удалось обернуть голову вокруг большей части его, однако у меня возникают трудности с установкой целевого элемента управления segue косвенным образом.

Я понимаю, что destinationViewController принимает AnyObject? но как мне возвращать класс как возвращаемое значение функции непосредственно в destinationViewController? Что-то вроде:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if(segue.identifier == "nextView") { 

     let nextScene = segue.destinationViewController as? getNextView() 

     // ...blah blah blah... 

    } 

} 

Где getNextView() переопределяется подкласса, единственной целью которых является возвращать ссылку на destinationViewController:

override func getNextView -> AnyObject! { 

    return SomeClassBasedOnUIViewController 

} 

XCode не рад, что я с использованием «последовательных заявлений «на одной строке в моей подготовкеForSegue(), и я не понимаю, как ее решить, поэтому любая помощь будет принята с благодарностью!

Спасибо!

EDIT:

К сожалению об этом, но getNextView() фактически не возвращать Опциональный. Просто взял на это и внес поправки в вопрос. Тем не менее проблема сохраняется.

+0

Почему вы пытаетесь это сделать? Какова ваша цель? – Wain

+0

Цель состоит в том, чтобы спроектировать класс, содержащий протокол, в котором целеуказатель для контроля segue определяется разработчиком через переопределенную функцию в производном классе. Как можно большая часть реализации должна оставаться скрытой. –

ответ

0
override func prepareForSegue(segue: UIStoryboardSegue, sender:AnyObject!) { 
    if segue.identifier == "nextView" { 
     let nextScene : BaseClassBasedOnUIViewController = segue.destinationViewController as! getNextView() 
    } 
} 

destinationViewController не должен быть опциональным. Вы можете попробовать это.

override func getNextView -> AnyObject! { 
    return SomeClassBasedOnUIViewController 
} 
+0

Проблема сохраняется, когда строка нарушения помечена как «Последовательные операторы в строке должны быть разделены символом«; », где проблема заключается в вызове getNextView(). Xcode хочет «getNextView» и не любит вызов функции. –

+0

Вы можете проверить это, затем -> http://stackoverflow.com/a/30966534/767329 –

2

То, что вы пытаетесь сделать, нелогично. Это указание времени компиляции класса или протокола, которому должна соответствовать эта ссылка. Попытка получить эту ссылку во время выполнения не поможет. Вместо этого вы должны проверять соответствие статическому протоколу и затем отправлять вызовы на основе этого протокола на неизвестный класс реализации.