Spa*_*Dog 2 macos cocoa cocoa-touch objective-c ios
我有这个方法应该设置对象的名称,但对象可以是3个类,A,B和C.
如果我只是这样做
[object setName: @"new name"]; //at this point I am treating object as of type id
Run Code Online (Sandbox Code Playgroud)
Xcode会抱怨有多个名为"setName"的方法,然后我就这样做了
if ([object isKindOfClass:[ClassA class]]) {
[(ClassA *)object setName:newName];
} else
if ([object isKindOfClass:[ClassB class]]) {
[(ClassB *)object setName:newName];
} else
[(ClassC *)object setName:newName];
}
Run Code Online (Sandbox Code Playgroud)
但这对我来说似乎很蹩脚.
我试图通过使用这样的东西欺骗Xcode
[(typeof(object))object setName:newName];
Run Code Online (Sandbox Code Playgroud)
但Xcode也不喜欢它,可能是因为它typeof(object)
正在返回id
,我们又回到了原点.同样的错误.
我有什么更好/更优雅的方法呢?
使用A,B和C类都符合的协议.
@protocol MyProtocol <NSObject>
@required
- (void)setName:(NSString *)name;
@end
Run Code Online (Sandbox Code Playgroud)
然后
id<MyProtocol> object = ...
[object setName:newName];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49 次 |
最近记录: |