Ios 如何有条件地遵守委托协议?

Ios 如何有条件地遵守委托协议?,ios,objective-c,delegates,Ios,Objective C,Delegates,如果我在iOS项目中包含仅在(例如)iOS 9中可用的框架,但我仍然支持iOS 8,那么如何根据iOS版本有条件地遵守委托协议?例如,我知道我可以有条件地包括框架,如下所示: #import <Availability.h> #ifdef __IPHONE_9_0 #import <Something/Something.h> #endif #导入 #ifdef\uuuIphone\u9\u0 #进口 #恩迪夫 但是,如果该框架还需要符合委托协议呢 @接口示例控制器(

如果我在iOS项目中包含仅在(例如)iOS 9中可用的框架,但我仍然支持iOS 8,那么如何根据iOS版本有条件地遵守委托协议?例如,我知道我可以有条件地包括框架,如下所示:

#import <Availability.h>
#ifdef __IPHONE_9_0
#import <Something/Something.h>
#endif
#导入
#ifdef\uuuIphone\u9\u0
#进口
#恩迪夫
但是,如果该框架还需要符合委托协议呢

@接口示例控制器()

如果我在iOS 9上,如何只包含“SomethingDelegate”


谢谢

嗯,大致相同的方式:

@interface ExampleController () <UITextViewDelegate
#ifdef __IPHONE_9_0
     , SomethingDelegate
#endif
>
@接口示例控制器()

顺便说一句,这不是检查设备是否运行iOS 9-。

的方式,大致相同:

@interface ExampleController () <UITextViewDelegate
#ifdef __IPHONE_9_0
     , SomethingDelegate
#endif
>
@接口示例控制器()

顺便说一句,这不是你应该检查设备是否运行iOS 9-.

的方法@Glorfindel的答案更清晰,我支持它,但只是为了有一个替代答案

#ifdef __IPHONE_9_0
    #import <Something/Something.h>
    #define DELEGATES UITextViewDelegate, SomethingDelegate
#else
    #define DELEGATES UITextViewDelegate
#endif

@interface ExampleController : UIViewController <DELEGATES>
#ifdef_u_uiPhone_9_0
#进口
#定义委托UITextViewDelegate,SomethingDelegate
#否则
#定义委托UITextViewDelegate
#恩迪夫
@接口示例控制器:UIViewController

还有一个问题,你将如何处理属于
SomethingDelegate
协议的方法,也就是
#ifdef/#endif
,或者只是保持它们“原样”,因为它们永远不会被调用。

对于@Glorfindel的回答更清晰,我会支持它,但只是为了有一个替代答案

#ifdef __IPHONE_9_0
    #import <Something/Something.h>
    #define DELEGATES UITextViewDelegate, SomethingDelegate
#else
    #define DELEGATES UITextViewDelegate
#endif

@interface ExampleController : UIViewController <DELEGATES>
#ifdef_u_uiPhone_9_0
#进口
#定义委托UITextViewDelegate,SomethingDelegate
#否则
#定义委托UITextViewDelegate
#恩迪夫
@接口示例控制器:UIViewController

还有一个问题,您将如何处理属于
SomethingDelegate
协议的方法,也就是
#ifdef/#endif
,或者保持它们“原样”,因为它们永远不会被调用。

对于一个拥有自己文件的类别来说,这是一项很好的任务。这些文件的内容可以完全导出

//ExampleController+SomethingDelegate.h
#ifdef __IPHONE_9_0

#import <Something/Something.h>

@interface ExampleController (SomethingDelegate) <SomethingDelegate>
@end
#endif
//ExampleController+SomethingDelegate.h
#ifdef\uuuIphone\u9\u0
#进口
@接口示例控制器(SomethingDelegate)
@结束
#恩迪夫

//ExampleController+SomethingDelegate.m
#导入“ExampleController+SomethingDelegate.h”
#ifdef\uuuIphone\u9\u0
@实现示例控制器(SomethingDelegate)
-(BOOL)一些东西应该做煎饼:(某物*)某物;
@结束
#恩迪夫

这比用中间的宏在多行中分割声明要好得多,并将所有相关的方法放在一个地方,在一个<代码> IFDEF。

< P>这是一个有自己文件的类的好任务。这些文件的内容可以完全导出

//ExampleController+SomethingDelegate.h
#ifdef __IPHONE_9_0

#import <Something/Something.h>

@interface ExampleController (SomethingDelegate) <SomethingDelegate>
@end
#endif
//ExampleController+SomethingDelegate.h
#ifdef\uuuIphone\u9\u0
#进口
@接口示例控制器(SomethingDelegate)
@结束
#恩迪夫

//ExampleController+SomethingDelegate.m
#导入“ExampleController+SomethingDelegate.h”
#ifdef\uuuIphone\u9\u0
@实现示例控制器(SomethingDelegate)
-(BOOL)一些东西应该做煎饼:(某物*)某物;
@结束
#恩迪夫

这比用中间的宏在多行中分割声明要好得多,并将所有相关的方法放在一个地方,在一个<代码> IFDEF。

哦,我,我一直被误导。非常感谢。只要它允许我,我就会接受。哦,天哪,我被误导了。非常感谢。只要它允许我,我就接受。