我是Objective-C的新手,我想知道是否有任何方法隐式转换对象。
隐含地,我的意思是,例如,写下这样的东西:
MyColorClass *color = [[MyColorClass alloc] init];
SomeStuffUsingUIColor(color);
而不是:
MyColorClass *color = [[MyColorClass alloc] init];
SomeStuffUsingUIColor([color toUIColor]);
我知道没有办法重载强制转换操作符(在Objective-C中),但是对于这个问题可能有一个特定的解决方案。
答案 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
。