Iphone 这个代码有什么问题? @协议MyViewDelegate -(void)didFinishProcessing:(MyView*)MyView//编译器在此停止,但出现错误 @结束 @接口MyView:MySuperclass{ 身份证代表; } @属性(非原子,保留)id委托; @结束
当我尝试编译时,我会在MyView之前得到“预期的”)”。Iphone 这个代码有什么问题? @协议MyViewDelegate -(void)didFinishProcessing:(MyView*)MyView//编译器在此停止,但出现错误 @结束 @接口MyView:MySuperclass{ 身份证代表; } @属性(非原子,保留)id委托; @结束,iphone,objective-c,protocols,Iphone,Objective C,Protocols,当我尝试编译时,我会在MyView之前得到“预期的”)”。 错误在哪里?在@protocol之前添加行@class MyView。此时,编译器还不知道您的MyView类。MyView未被编译器识别,这就是为什么它希望在它之前有一个关闭的paren。这是因为该类是在MyViewDelegate协议下定义的,因此编译器尚未看到它。加 @protocol MyViewDelegate <NSObject> - (void) didFinishProcessing:(MyView*)myVi
错误在哪里?在
@protocol
之前添加行@class MyView
。此时,编译器还不知道您的MyView
类。MyView
未被编译器识别,这就是为什么它希望在它之前有一个关闭的paren。这是因为该类是在MyViewDelegate
协议下定义的,因此编译器尚未看到它。加
@protocol MyViewDelegate <NSObject>
- (void) didFinishProcessing:(MyView*)myView; //compiler stops here with error
@end
@interface MyView : MySuperclass {
id<MyViewDelegate> _delegate;
}
@property (nonatomic, retain) id<MyViewDelegate> delegate;
@end
上面的协议声明来修复它 太好了,现在我还有一个问题要问你。#import“MyView.h”和@class MyView;之间有什么区别;?我认为没有区别,但显然有区别,因为如果我只是导入这个类,它不起作用,所以我需要你提供的代码行。你可能有一个循环引用。由于协议依赖于MyView的定义,但MyView依赖于MyViewDelegate的定义,因此可能会失败<代码>#导入包含文件,就像复制和粘贴文件一样
@class
是一个占位符定义。它说“相信我,这个类是存在的,在链接过程中你会发现它的,但现在你只需要知道这些。”Horatiu,@class只是告诉编译器不要注意与这个类相关的任何错误#导入导入尚未导入的文件内容。在您的情况下,您已经在该文件中了-我相信在“MyView.h”中导入“MyView.h”不会起任何作用。。。
@class MyView;