自动转换类型 - 目标C.

时间:2013-05-06 12:20:30

标签: objective-c

我是Objective-C的新手,我想知道是否有任何方法隐式转换对象。

隐含地,我的意思是,例如,写下这样的东西:

MyColorClass *color = [[MyColorClass alloc] init];
SomeStuffUsingUIColor(color);

而不是:

MyColorClass *color = [[MyColorClass alloc] init];
SomeStuffUsingUIColor([color toUIColor]);

我知道没有办法重载强制转换操作符(在Objective-C中),但是对于这个问题可能有一个特定的解决方案。

2 个答案:

答案 0 :(得分:1)

通常无需对象转换为新类型。只需实现与UIColor相同的方法,以便MyColorClass响应相同的消息。这不是总是 - 例如,如果MyColorClass不是UIColor子类,它将不会通过类别将任何方法添加到UIColor。如果你需要,最好从UIColor派生MyColorClass,这样前者的每个实例都是后者的一个实例。

答案 1 :(得分:0)

通常,您希望为此类事物创建一个类别,例如

@interface UIColor (MyExtensions)
- (void)doSomethingUsingColor
@end


@implementation UIColor (MyExtensions)
- (void)doSomethingUsingColor {
  //do something
}
@end

您可以在NSString+UIStringDrawing.h类别中看到一些示例。

另请注意,如果要对C结构执行某些操作,通常会声明一个函数,例如:

typedef struct {
   int x;
   int y;
} MyPoint;


void doSomethingWithPoint(MyPoint point) {
   //do something
}

您可以在API中查看示例,例如:NSStringFromCGPoint