Пользовательский init NSObject с объектом/параметрами
То, что я пытаюсь выполнить, это что-то вроде
Person *person1 = [[Person alloc]initWithDict:dict];
а затем в NSObject
"Лицо", введите что-то вроде:
-(void)initWithDict:(NSDictionary*)dict{
self.name = [dict objectForKey:@"Name"];
self.age = [dict objectForKey:@"Age"];
return (Person with name and age);
}
который затем позволяет мне продолжать использовать объект person с этими параметрами. Возможно ли это, или я должен сделать нормальный
Person *person1 = [[Person alloc]init];
person1.name = @"Bob";
person1.age = @"123";
?
Ответы
Ответ 1
Тип возврата недействителен, пока он должен instancetype
.
И вы можете использовать оба типа кода, который вы хотите....
Update:
@interface testobj : NSObject
@property (nonatomic,strong) NSDictionary *data;
-(instancetype)initWithDict:(NSDictionary *)dict;
@end
.m
@implementation testobj
@synthesize data;
-(instancetype)initWithDict:(NSDictionary *)dict{
self = [super init];
if(self)
{
self.data = dict;
}
return self;
}
@end
Используйте его, как показано ниже:
testobj *tt = [[testobj alloc] initWithDict:@{ @"key": @"value" }];
NSLog(@"%@",tt.ss);
Ответ 2
измените свой код следующим образом
-(id)initWithDict:(NSDictionary*)dict
{
self = [super init];
if(self)
{
self.name = [dict objectForKey:@"Name"];
self.age = [dict objectForKey:@"Age"];
}
return self;
}
Ответ 3
Итак, вы можете использовать современный стиль objective-c для получения значений ассоциативных массивов;)
-(id)initWithDict:(NSDictionary*)dict
{
self = [super init];
if(self)
{
self.name = dict[@"Name"];
self.age = dict[@"Age"];
}
return self;
}