0

我想更新 XCode 版本。

但是在更新时,我收到了几个编译器错误。与此相同:

id<MyProtocol> objectToDelete = group[index.unsignedIntegerValue];

在“id”类型的对象上未找到读取数组元素的预期方法

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];唯一的解决办法?

4

2 回答 2

2

首先,我假设这group实际上不是一个NSArray,但实际上是:

id<MyProtocol> _Nonnull group

这说那group是“一些符合的对象MyProtocol”。没有MyProtocol说这个对象可以下标。如果你希望它可以被索引下标,那么你需要在协议中这样说:

@protocol MyProtocol <NSObject>
- (id<MyProtocol>)objectAtIndexedSubscript:(NSUInteger)idx;
...

你当然需要objectAtIndexedSubscript:在任何符合的情况下实现(但这似乎已经是这种情况,因为它在你施放它时起作用)。

于 2018-04-03T19:58:23.660 回答
-1

试试这个:[group objectAtIndexedSubscript:idx]

于 2018-04-03T19:23:28.477 回答