#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