当前位置:  开发笔记 > IOS > 正文

在objective-c中定义和使用协议

如何解决《在objective-c中定义和使用协议》经验,为你挑选了2个好方法。

我正在尝试扩展NSImageView,以便将拖放责任委派给控制器.一切正常,编译器现在显示有关向类型为id的对象发送消息的警告.为了解决这个问题,我假设我只需要使用协议名称后缀ivar的类型.但是,由于无法找到协议的定义,因此失败了.

#import 


@interface DragDropImageView : NSImageView {
    id  _delegate;
}

@property (readwrite, retain) id  delegate;

@end

@protocol DragDropImageViewDelegate

@optional

- (NSDragOperation)dragDropImageView:(DragDropImageView *)ddiv validateDrop:(id     )info;
- (BOOL)dragDropImageView:(DragDropImageView *)ddiv acceptDrop:(id )info;
- (void)concludeDragOperation:(id )sender;  

@end

我可能会出错的任何指针?我敢肯定它一定很简单,但我对obj-c很新.



1> Barry Wark..:

你是在正确的轨道上,但是你被C编译器挂了,这有点过时了.编译器很窒息,因为在使用协议时定义不可用.@protocol DragDropImageViewDelegate必须先定义才能id< DragDropImageViewDelegate>用作类型.您可以在使用之前(即在@interface之前)移动@protocol定义,或者添加一个

@protocol DragDropImageViewDelegate;

在@interface(前向声明)之前,将@protocol声明保留在原来的位置.



2> Peter N Lewi..:

作为一般规则,我首先定义协议,然后是

@class DragDropImageView;

但你可以做相反的事情,并在前面:

@protocol DragDropImageViewDelegate;

在我看来,协议是声明的一个重要部分,并且往往很短,所以我更喜欢它先行而不是丢失在头文件的底部,但这是一个品味问题.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有