首先是背景:
我正在扩展CLBeacon以添加一些额外的字段和功能。
扩展类的标题如下所示
#import <CoreLocation/CoreLocation.h>
@interface CXBeacon : CLBeacon
@property (readonly) NSString * signature;
//..... some additional methods here .....
@end
然后我使用CLLocationManager查找附近的CLBeacons等。
问题是,由于CLLocationManager的委托方法传递了CLBeacon的实例,我该如何将它们转换为CXBeacon?我可以将CLBeacon转换为CXBeacon并将其称为一天吗?还是有一个我不知道的概念适用于这种情况?
答案 0 :(得分:1)
总结:子类化CLBeacon
可能无法满足您的需求。添加class category可能会做你想要的。
如您所知,CLBecaon
通常在委托方法中提供给您,例如
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
这意味着CLLocationManager
或其他一些苹果类实际上正在创建CLBeacon
实例(而不是您的子类CXBeacon
实例),而您无法控制它。
类类别允许您获取现有类并对其进行扩展。要使用CLBeacon
执行此操作,您可以创建CLBeacon+MyCategoryName.{h,m}
,您可以在CLLocationManager委托方法中使用(包括&#34; CLBeacon+MyCategoryName.h
&#34;)。
请注意,类别中存在一些限制和警告 - 在您的情况下,使用属性意味着您需要实现动态setter和getter(请参阅上面的文档和blogs)。