2016-06-22 4 views

ответ

2

Вместо использования старого 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 
} 
+0

Я хочу, чтобы это сделать, если appDelegateObj.navigationController! .topViewController! == myViewController { // Не клеится верно даже оба одинаково, но ссылки памяти отличаются } еще { // нужно обрабатывать что-то еще } –

+0

благодарит Lukas Я пытаюсь на него –

1
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 
} 
+0

ОК спасибо Akansha позвольте мне check –

+2

Okay @GopalDevra Меня зовут Akshansh haha. –

+0

sorry man :) спасибо Akshansh –

0

Наконец я достиг в этом решении

let name = NSStringFromClass((vcAnyObj?.classForCoder)!) 
let name2 = NSStringFromClass((appDelegateObj.navigationController!.topViewController?.classForCoder)!) 

if name == name2 { 
print("same view controller") 
}else { 
print("different view controller") 

} 
+0

Вы можете даже переопределить оператор '==' для правильного сравнения. Если два viewControllers имеют один и тот же класс, это не означает, что они равны –