2

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

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

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

而不是这个:

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

我知道没有办法重载强制转换运算符(在 Objective-C 中),但也许有针对此问题的特定解决方案。

4

2 回答 2

1

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

于 2013-05-06T12:25:20.077 回答
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.

于 2013-05-06T12:32:19.743 回答