我想更新XCode版本。
但是在更新时我收到了几个编译器错误。与此相同:
id<MyProtocol> objectToDelete = group[index.unsignedIntegerValue];
读取未在类型&#39; id&#39;
的对象上找到的数组元素的预期方法
id<MyProtocol> _Nonnull group
@protocol MyProtocol <NSObject>
@property (copy, nonatomic) NSString* name;
@property (copy, nonatomic) NSString* id;
@property (copy, nonatomic) NSString* internalType;
@property (strong, nonatomic) NSMutableArray<id<SomeAnotherProtocol>>* objects;
- (instancetype)initWithObject:(MyProtocol*)object;
// Search
- (BOOL)isContainsObjectWithID:(NSString*)myID;
- (NSUInteger)indexForObjectID:(NSString*)myID;
- (id<SomeAnotherProtocol>)objectWithID:(NSString*)myID;
- (NSString*)groupID;
@end
此错误仅出现在XCode 9.3版本上。
id<MyProtocol> objectToDelete = ((NSArray *) group)[index.unsignedIntegerValue];
是唯一的解决方案吗?
答案 0 :(得分:2)
首先,我假设group
实际上不是NSArray
,但实际上是:
id<MyProtocol> _Nonnull group
这表示group
是“某个符合MyProtocol
的对象”。 MyProtocol
中没有任何内容表示此对象可以下标。如果您希望它可以通过索引进行订阅,那么您需要在协议中说明这一点:
@protocol MyProtocol <NSObject>
- (id<MyProtocol>)objectAtIndexedSubscript:(NSUInteger)idx;
...
你当然需要在符合的任何事情中实现objectAtIndexedSubscript:
(但这似乎已经是这种情况,因为当你施放它时它会起作用)。
答案 1 :(得分:-1)
试试这个: [group objectAtIndexedSubscript:idx]