web-dev-qa-db-ja.com

オブジェクト/パラメータを使用したNSObjectカスタム初期化

私が達成しようとしていることは次のようなものです

Person *person1 = [[Person alloc]initWithDict:dict];

次に、NSObject "Person"に、次のようなものがあります。

-(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";

12
Oscar Apeland

戻り値の型は無効ですが、instancetypeである必要があります。

そして、あなたはあなたが望む両方のタイプのコードを使うことができます..。

更新:

@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);
27
Hindu

このようにコードを変更します

-(id)initWithDict:(NSDictionary*)dict
 {
    self = [super init];

    if(self)
    {       
      self.name = [dict objectForKey:@"Name"];
      self.age = [dict objectForKey:@"Age"];
    }
   return self;
}
10
zt9788

したがって、最新のObjective-cスタイルを使用して、連想配列の値を取得できます;)

-(id)initWithDict:(NSDictionary*)dict
 {
    self = [super init];

    if(self)
    {       
      self.name = dict[@"Name"];
      self.age = dict[@"Age"];
    }
   return self;
}
0
Josep Escobar