Я просто хочу, чтобы преобразовать любой UIViewController
подкласс AnyClass
для проверки от метода isKindOfClass
, поскольку этот метод принимает AnyClass
в качестве аргумента.Как конвертировать или напечатанный UIViewController в AnyClass в Swift
ответ
Вместо использования старого Objective-C
API, вы можете использовать ключевое слово as
или is
в swift.
if let controller = yourViewController as? SomeClass {
// use controller, is already casted to SomeClass
}
if yourViewController is SomeClass {
let controller = yourViewController as! SomeClass
// use controller now
}
ДОБАВЛЕНИЕ: Если адреса памяти различны, объекты не равны. Попробуйте проверить тип topViewController
, как я упомянул в ответе.
if let topViewController = appDelegateObj.navigationController.topViewController as? YOUR_VIEW_CONTROLLER_CLASS {
// do something
}
func someMethod (someClass : AnyClass) {
if someClass is YourClass {
someClass.someMethodOfYourClass()
}
}
использовать этот метод
class YouClass: UIViewController {
func something() {
someMethod(self) // sending itself (a.k.a) YourClass
}
}
Надеется, что это помогает
Редактировать на основе комментариев:
let controller = appDelegateObj.navigationController!.topViewController
if controller is ClassName {
// controller good to use
}
ОК спасибо Akansha позвольте мне check –
Okay @GopalDevra Меня зовут Akshansh haha. –
sorry man :) спасибо Akshansh –
Наконец я достиг в этом решении
let name = NSStringFromClass((vcAnyObj?.classForCoder)!)
let name2 = NSStringFromClass((appDelegateObj.navigationController!.topViewController?.classForCoder)!)
if name == name2 {
print("same view controller")
}else {
print("different view controller")
}
Вы можете даже переопределить оператор '==' для правильного сравнения. Если два viewControllers имеют один и тот же класс, это не означает, что они равны –
Я хочу, чтобы это сделать, если appDelegateObj.navigationController! .topViewController! == myViewController { // Не клеится верно даже оба одинаково, но ссылки памяти отличаются } еще { // нужно обрабатывать что-то еще } –
благодарит Lukas Я пытаюсь на него –