“没有更多上下文的表达式类型不明确” - 引用 appDelegate
Posted
技术标签:
【中文标题】“没有更多上下文的表达式类型不明确” - 引用 appDelegate【英文标题】:"type of expression is ambiguous without more context" - Referencing appDelegate 【发布时间】:2015-06-18 18:58:34 【问题描述】:我的 appDelegate
最初是用 Obj-C 编写的。我正在尝试在一个新的 Swift 类中访问它,但我遇到了一个我认为具有误导性的奇怪错误,我正在尝试找到根目录。
在我的 Swift 文件中,我设置了一个断点:
var appDelegate = UIApplication.sharedApplication().delegate
如果我只是po:
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 '...'
编辑
根据@Martin 的评论,我将代码更改为:
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
【问题讨论】:
appDelegate
显然是一个可选。如果您改为定义var appDelegate = UIApplication.sharedApplication().delegate!
,它是否有效?
@MartinR 这做了一些事情 - 请参阅我的编辑。一个新错误 - 就像我现在正在访问不同的 AppDelegate 对象...
【参考方案1】:
UIApplication
的delegate
方法声明为
unowned(unsafe) var delegate: UIApplicationDelegate?
您必须将返回值转换为应用程序委托的具体类型:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
【讨论】:
以上是关于“没有更多上下文的表达式类型不明确” - 引用 appDelegate的主要内容,如果未能解决你的问题,请参考以下文章
Xcode Beta 6“没有更多上下文的表达式类型不明确”导航链接