これらのプロパティを dinnerPrefMethod メソッドのパラメーターとして使用したい場合、どうすればよいでしょうか。[...] 私の目標は、メソッドを呼び出して、オブジェクトの 2 つのプロパティをパラメーターとして取得できるようにすることです。
これをすべて回避したいようです:
FamilyMember *familyMember = [[FamilyMember alloc] init];
[familyMember setName:@"First Last"];
[familyMember setPreference:dunno];
[familyMember announceDinnerPreference];
どこ-[FamilyMember announceDinnerPreference]
にあなたの修正版がありますdinnerPrefMethod:
:
- (void)announceDinnerPreference
{
NSLog(@"Let's see what %@ wants for dinner...", [self name]);
switch ([self preference]) {
case pizza:
NSLog(@"%@ wants pizza.", [self name]);
break;
case steak:
NSLog(@"%@ wants steak.", [self name]);
break;
case seafood:
NSLog(@"%@ wants seafood.", [self name]);
break;
case dunno:
NSLog(@"%@ doesn't know.", [self name]);
break;
}
}
おそらく、メソッドを定義したいでしょう-[FamilyMember setName:preference:announceDinnerPreference:]
- (void)setName:(NSString *)name preference:(dinnerPreference)preference announceDinnerPreference:(BOOL)announce
{
[self setName:name];
[self setPreference:preference];
if (announce) {
[self announceDinnerPreference];
}
}
これにより、次のように書くことができます
FamilyMember *familyMember = [[FamilyMember alloc] init];
[familyMember setName:@"First Last" preference:dunno announceDinnerPreference:YES];
率直に言って、これはスタイル的に非常に奇妙です。
はるかにスタイリッシュな方法のアプローチは、定義することです-initWithName:preference:
- (id)initWithName:(NSString *)name preference:(dinnerPreference)preference
{
self = [super init];
if (self) {
[self setName:name];
[self setPreference:preference];
}
return self;
}
あなたはそれから書くことができるでしょう
FamilyMember *familyMember = [[FamilyMember alloc] initWithName:@"First Last" preference:dunno];
[familyMember announceDinnerPreference];
では、オブジェクトのプロパティをパラメータであると言わずにメソッドで使用できますか?
はい。オブジェクトのインスタンス変数は、そのインスタンス メソッド内でアクセスできます。