Как понять эту строку кода Swift для всплывающего в корневой контроллер представления? - PullRequest
0 голосов
/ 25 февраля 2019

Я хочу написать некоторый код для выталкивания из текущего контроллера представления обратно в корневой контроллер представления.Достаточно запутанно, я нашел многочисленные ответы на этот счет со всеми видами синтаксиса.(Я предполагаю старые ответы в Objective C или другой версии Swift ...) Вот самый простой синтаксис, который в настоящее время работает для меня в моем AppDelegate:

let navigationViewController = self.window?.rootViewController as! UINavigationController

[navigationViewController .popToRootViewController(animated: true)]

Я получил это далеко, просмотрев этоответ: https://stackoverflow.com/a/23027260/8887398 Его синтаксис был не совсем понятен, и я думаю, что это старый синтаксис с 2012 года, поэтому мне пришлось немного его изменить, но он работает с моим кодом выше.

Вопрос: Я не совсем понимаю, что происходит во 2-й строке кода.Конечно, я понимаю, что он возвращается к корневому контроллеру представления, но я вообще не понимаю синтаксис.Наиболее запутанным является то, что код окружен парой скобок [], которые я совсем не понимаю.Затем popToViewController начинается с точки '.', Которая отличается от ответа, который я связал.Я привык использовать "."чтобы получить доступ к свойствам объекта, но вот он просто используется автономно без чего-либо с левой стороны.

Этот код, кажется, функционирует правильно для меня, но какие бесчисленные версии синтаксиса и способов выскочитьВернувшись к контроллеру корневого представления, который я нашел в Интернете, я понятия не имею, правильно ли я делаю или как оно работает.Все, что я знаю, это «это работает прямо сейчас».Пожалуйста, помогите мне понять этот код.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Класс UINavigationController имеет внутри метод с именем popToRootViewController, который принимает параметр bool с именем animated.Если вы передадите анимированное значение как true, навигация произойдет с анимацией.

Так что для вызова метода в цели c

UINavigationController *navigationController = (UINavigationController  *)self.window.rootViewController;
[navigationController popToRootViewControllerAnimated:YES];

Выше в первый раз мы получили указатель на navigationController.Используя это, мы вызываем метод popToRootViewControllerAnimated внутри класса UINavigationController со значением параметра YES (в Objc YES для true и NO для false)

То же самое выше можно записать в swift как

let rootNavController = self.window?.rootViewController as! UINavigationController

rootNavController.popToRootViewController(animated: true)

Как и в сценарии в OBjc, приведенный выше синтаксис написан быстро.мы получаем экземпляр navController и вызываем метод popToRootViewController ()

0 голосов
/ 25 февраля 2019

На самом деле, это просто массив ...

Вы могли бы написать: navigationViewController.popToRootViewController(animated: true)

И это сделало бы то же самое.

Если вы сделаете:

let x = navigationViewController.popToRootViewController(animated: true)

x будет содержать необязательный массив UIViewController типа [UIViewController]?

Если вы выполните:

let x = [navigationViewController.popToRootViewController(animated: true)]

x будет содержатьмассив с необязательным массивом UIViewController типа [[UIViewController]?]

Если вы сделаете:

[navigationViewController.popToRootViewController(animated: true)]

Массив массива никогда не будет использоваться ...

И пробел просто игнорируется в Swift, например, вы можете сделать:

myObject
    .myMethod()

Он часто используется для свободного синтаксиса ...

РЕДАКТИРОВАТЬ :

Вызов Objective C для этого метода будет:

[navigationViewController popToRootViewControllerAnimated: YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...