实现委托时的“预期类型”

Posted

技术标签:

【中文标题】实现委托时的“预期类型”【英文标题】:"expected type" while implementing delegate 【发布时间】:2013-07-18 13:41:26 【问题描述】:

我只写了一段代码,但出现错误“预期类型@line - (void)backButtonTapped:(TopBarViewController *) topBarViewController;

这有什么问题?

@protocol TopBarDelegate

- (void)backButtonTapped:(TopBarViewController *) topBarViewController;

@end


@interface TopBarViewController : UIViewController




@property (assign, nonatomic) id <TopBarDelegate> delegate;

-(void) backButtonPressed:(id)sender;

-(void) menuButtonPressed:(id)sender;

@end

【问题讨论】:

【参考方案1】:

在顶部添加以下内容。由于协议TopBarDelegate 是在类TopBarViewController 之上定义的,因此在您定义协议时,编译器不知道有一个名为TopBarViewController 的类。这一行告诉它确实有一个具有该名称的类在某处定义。

@class TopBarViewController;

【讨论】:

【参考方案2】:

问题在于,在解析该文件时,编译器不知道TopBarViewController 是什么。它只是一个随机令牌,它不知道如何处理。该类在不同的文件中定义,因此编译器在解析该类时不会查看它。

你有两个选择:

导入定义该类的头文件。 使用@class 告诉编译器它是在别处定义的类。

一般来说,后一种选择更好,因为它代表编译器的工作更少,并且不会导致循环导入。

【讨论】:

选项 1 在这种情况下是可行的,因为它是同一个标头。 啊,我明白了,我看错了代码。问题本质上是我如何陈述它,除了它不是在外部文件中,而是在类本身的声明之上。第一个选项不可行,第二个选项是你应该使用的。

以上是关于实现委托时的“预期类型”的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt C++ 中的自定义项委托上绘制文本时的性能问题

应用程序尚未启动时的 Apple 推送通知委托方法

使用 NSFetchedResultsController 委托方法将多行插入 tableView 时的问题

设置 UITableView 委托和数据源时的最佳实践

UIPickerView 委托在以编程方式创建时从不调用

拖动 UIScrollView 时的 EXC_BAD_ACCESS