Доступ к массиву контроллеров представления в стеке в Swift

#ios #swift #cs193p

#iOS #swift #cs193p

Вопрос:

По сути, я пытаюсь сделать это в Swift

 // get the Detail view controller in our UISplitViewController (nil if not in one)
id detail = self.splitViewController.viewControllers[1];
// if Detail is a UINavigationController, look at its root view controller to find it
if ([detail isKindOfClass:[UINavigationController class]]) {
    detail = [((UINavigationController *)detail).viewControllers firstObject];
}
  

Я дошел до этого;

 var detail : AnyObject = self.splitViewController.viewControllers[1]

    if detail.isKindOfClass(UINavigationController) {
        detail = ((detail: UINavigationController).detail).
  

но я не могу найти, что делать после этого.

Еще один отдельный быстрый вопрос. Считается ли хорошей практикой иметь много операторов, заканчивающихся на as [type] . В основном это связано с использованием AnyObject, например, с использованием valueForKeyPath, например. Это просто кажется немного запутанным, когда все это в моем коде

Ответ №1:

Вот способ сделать это в Swift, используя необязательную привязку:

 // get the Detail view controller in our UISplitViewController (nil if not in one)
var detail = self.splitViewController.viewControllers[1];
// if Detail is a UINavigationController, look at its root view controller to find it
if let nav = detail as? UINavigationController {
    detail = nav.viewControllers[0];
}
  

Что касается вашего вопроса, да, его довольно часто используют as type повсеместно в Swift при использовании ObjC API. Это побочный продукт перехода от ObjC к строго типизированному языку Swift, он должен улучшиться, когда на Swift будет написано больше библиотек и будет использоваться меньше ObjC!

Комментарии:

1. Это идеально! Просто мой код OCD немного перегружает стену!

2. @Sawyer05 Я думаю, что это действительно делает код более читаемым и чистым. В настоящее время мне действительно нравится вывод типов в Swift, и мой OCD теперь срабатывает при просмотре ObjC больше, чем Swift: p

3. Я думаю, мне просто нравится, чтобы код был коротким и приятным. проблема # 100000 — я пытаюсь связать элемент управления обновлением с функцией IBAction, но это только дает мне возможность создать для него выход

4. @Sawyer05 Было бы лучше, если бы вы создали для этого новый вопрос. Попробуйте щелкнуть правой кнопкой мыши по элементу управления и перетащить действие на объект контроллера представления в IB