2015-06-18 3 views
3

У меня есть appDelegate, первоначально написанный в Obj-C. Я пытаюсь получить к нему доступ в новом классе Swift, но я получаю странную ошибку, которая, я думаю, вводит в заблуждение, и я пытаюсь добраться до корня."Тип выражения неоднозначен без дополнительного контекста" - Ссылка на appDelegate

В моем Swift файл, я поставил точку останова после:

var appDelegate = UIApplication.sharedApplication().delegate 

Если бы я только ро:

po appDelegate 

я получаю:

Printing description of appDelegate: 
Optional(<AppDelegate: 0x7f81a2d1cc40>) 

Все в порядке.

Однако, когда я пытаюсь:

po appDelegate.navigationController 

в консоли отладки я получаю:

error: <EXPR>:1:13: error: type of expression is ambiguous without more context 

И navigationController является собственностью AppDelegate, объявленный в оригинальном Obj-C appDelegate.h файл.


Вот мой оригинальный SO вопрос: Cannot invoke '...' with an argument list of type '...'


EDIT

на основе @ комментарий Мартина, я изменил мой код:

var appDelegate = UIApplication.sharedApplication().delegate! 
    appDelegate.navigationController.popViewControllerIsAnimated(true) 

который теперь воспитывает ошибка:

'UIApplicationDelegate' does not have a member named 'navigationController' 

Однако, вот мой Obj-C AppDelegate.h:

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (nonatomic,strong) VUNavigationController *navigationController; 

@property (nonatomic,strong) UIWindow *window; 

@end 
+0

'appDelegate', по-видимому, * необязательный *. Это работает, если вы определяете 'var appDelegate = UIApplication.sharedApplication(). Делетете!' Вместо этого? –

+0

@MartinR Что-то сделал - посмотри мое редактирование. Новая ошибка - это как будто я обращаюсь к другому объекту AppDelegate сейчас ... – Ramsel

ответ

3

Метод UIApplicationdelegate объявлен как

unowned(unsafe) var delegate: UIApplicationDelegate? 

Вы должны отбрасывать возвращаемое значение для конкретного типа вашего делегат приложения:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
Смежные вопросы