在 'id<ProtocolName>' 类型的对象上找不到读取数组元素的预期方法
Expected method to read array element not found on object of type 'id<ProtocolName>'
我想更新 XCode 版本。
但是在更新时我收到了几个编译器错误。与此相同:
id<MyProtocol> objectToDelete = group[index.unsignedIntegerValue];
Expected method to read array element not found on object of type '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];
是唯一的解决方案吗?
试试这个:
[组objectAtIndexedSubscript:idx]
首先,我假设 group
实际上不是 NSArray
,而是:
id<MyProtocol> _Nonnull group
这表示 group
是 "some object that conforms to MyProtocol
"。 MyProtocol
中没有任何内容表明该对象可以被下标。如果你想让它被索引订阅,那么你需要在协议中这样说:
@protocol MyProtocol <NSObject>
- (id<MyProtocol>)objectAtIndexedSubscript:(NSUInteger)idx;
...
你当然需要在任何符合的情况下实现 objectAtIndexedSubscript:
(但这似乎已经是这种情况,因为它在你投射时有效)。
我想更新 XCode 版本。
但是在更新时我收到了几个编译器错误。与此相同:
id<MyProtocol> objectToDelete = group[index.unsignedIntegerValue];
Expected method to read array element not found on object of type '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];
是唯一的解决方案吗?
试试这个: [组objectAtIndexedSubscript:idx]
首先,我假设 group
实际上不是 NSArray
,而是:
id<MyProtocol> _Nonnull group
这表示 group
是 "some object that conforms to MyProtocol
"。 MyProtocol
中没有任何内容表明该对象可以被下标。如果你想让它被索引订阅,那么你需要在协议中这样说:
@protocol MyProtocol <NSObject>
- (id<MyProtocol>)objectAtIndexedSubscript:(NSUInteger)idx;
...
你当然需要在任何符合的情况下实现 objectAtIndexedSubscript:
(但这似乎已经是这种情况,因为它在你投射时有效)。