gpt4 book ai didi

ios - 如何比较在 Objective-C 中声明为 id 的实例

转载 作者:行者123 更新时间:2023-11-29 02:23:59 25 4
gpt4 key购买 nike

我有一个类有一个声明为类型 id 的属性,该类型 id 遵守协议(protocol),我想确保它的平等性。

如何检查声明为 id 类型的属性的值是否相等?

@interface MyClass : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) id<SomeProtocol> attribute;
@end

@implementation MyClass

- (BOOL)isEqual:(id)object {
if (self == object) {
return YES;
}

if (![object isKindOfClass:[MyClass class]]) {
return NO;
}

return [self isEqualToMyClass:(MyClass *) object];
}

- (BOOL)isEqualToMyClass:(MyClass *)rhsValue {
if (rhsValue == nil) {
return NO;
}

return
([self.name isEqualToString:rhsValue.name] &&
// Compiler produces error: Error:(90, 36) no known instance method for selector 'isEqual:'
[self.attribute isEqual:rhs.attribute]);
}

@end

SomeProtocol 定义为:

@protocol SomeProtocol <NSObject>

@end

扩展 SomeProtocol 的类:

@interface MyAttributeClass : NSObject <SomeProtocol>

@end

MyAttributeClass 实现协议(protocol) SomeProtocol 并且它有自己的 isEqual 并且当它的一个实例被 MyClass 存储在属性中时,我希望能够检查这些值是等效的。

分配给 MyClass 的是 MyAttributeClass:

MyClass *myClass = [[MyClass alloc] init];
myClass.name = "HAL";
myClass.attribute = [[MyAttributeClass alloc] init];

最佳答案

可能您忘记导入包含协议(protocol)定义的 header 。 (而不是只有一个前向声明。)在实现之前添加它。

关于ios - 如何比较在 Objective-C 中声明为 id<protocol> 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27769419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com