Jan*_*yne 0 objective-c ios jsonmodel
这是一个新手问题.我有一个看起来像下面的对象(例如MyObject.h).
#import <Foundation/Foundation.h>
#import "JSONModel.h"
@protocol MyObject
@end
@interface MyObject : JSONModel
@property (strong,nonatomic) NSString* name;
@end
Run Code Online (Sandbox Code Playgroud)
实现如下(例如MyObject.m).
#import "MyObject.h"
@implementation MyObject
@end
Run Code Online (Sandbox Code Playgroud)
在我的其他地方的代码中,我然后定义NSMutableArray如下.
NSMutableArray<MyObject>* list;
list = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)
我收到了这个警告.
不兼容的指针类型从'NSMutableArray ' 分配'NSMutableArray <MyObject> '
我知道泛型不支持Objective-C开箱即用(这也不是我在这里要做的),但我NSMutableArray的定义是这样的协议,MyObject因为我试图关注"JSONModel"的GitHub页面中的示例.
代码仍在编译,但上面有警告.我如何能
NSMutableArray正确分配/初始化?更新:
我继续搜索如何摆脱这个警告,事实证明,如果我创建一个NSMutableArray像下面这样的警告消失(并且项目编译没有错误).我将编写一个单元测试,看它是否按预期工作.
list = (id)[NSMutableArray new];
Run Code Online (Sandbox Code Playgroud)
NSMutableArray<MyObject>*
Run Code Online (Sandbox Code Playgroud)
这并不意味着你认为这意味着什么.这不是" NSMutableArray符合的事情<MyObject>".这是" NSMutableArray它本身符合的子类<MyObject>".
我不知道你提供的链接是什么.也许他们是子类NSArray,或者他们NSArray用一个试图符合协议的类别装饰.在任何一种情况下,这都是有点危险和疯狂之间.我会和他们谈谈他们的想法.我怀疑他们这样做是为了装饰,似乎意味着什么,实际上没有任何意义.(这并不是闻所未闻.苹果自己做了CFPropertyListRef,这似乎意味着什么,但事实上const void*,当你期望一个永远不会发出的警告时,这可能会非常令人惊讶.)
对于如何摆脱警告的问题,只需摆脱不正确的协议装饰.它应该是NSMutableArray*,而不是NSMutableArray<something>*.
顺便说一句,这段代码为您提供零和可忽略的好处:
NSMutableArray<MyObject>* list = (id)[NSMutableArray new];
Run Code Online (Sandbox Code Playgroud)
它给你一个很小的好处,因为后来的调用list = someOtherKindOfList会给出一个警告,但这是一个非常不寻常的操作(无论如何你有90%的时间必须抛出它,所以警告几乎永远不会发现真正的错误).然而,最值得注意的是,如果你这样做[list addObject:someRandomType],它不会发出警告,这是在这里犯错误的最常见方式.因此装修没有意义.
| 归档时间: |
|
| 查看次数: |
729 次 |
| 最近记录: |