0

ビッグナードランチガイドの課題は次のように述べています。

Silver Challenge: Another initializer

Create another initializer method for BNRItem. 
This initializer is not the designated initializer of BNRItem. 
It takes an NSString that identifies the itemName of the item and an 
NSString that identifies the serialNumber.

正しく実装したかどうかはわかりません。これは正しいです?

BNRItem.h

- (id)initWithItemName:(NSString *)name
        valueInDollars:(int)value
          serialNumber:(NSString *)aNumber;

// I added this for new initializer
- (id)initWithItemName:(NSString *)name serialNumber:(NSString *)aNumber;

BNRItem.m

- (id)initWithItemName:(NSString *)name valueInDollars:(int)value serialNumber:(NSString *)aNumber
{
    self = [super init];

    if (self)
    {
        [self setItemName:name];
        [self setSerialNumber:aNumber];
        [self setValueInDollars:value];
        dateCreated = [[NSDate alloc] init];
    }

    return self;
}

// Added the implementation for the new initializer
- (id) initWithItemName:(NSString *)name serialNumber:(NSString *)aNumber
{
    return [self initWithItemName:name valueInDollars:0 serialNumber:aNumber];
}
4

1 に答える 1

0

はい、あなたはそれを持っています。素晴らしい!

重要な点は、 Cocoa Fundamentals Guide(およびおそらくBNRブック)で説明されているように、初期化子の連鎖です。クラス内の指定されていない各初期化子は、クラスの指定された初期化子*を呼び出す必要があります。これにより、スーパークラスのDIが呼び出されます。


余談ですが、一部の人(私もその一人です)は、でアクセサメソッドを使用しないようinitに指示しますが、学習しているだけなので、本に記載されていることを実行してください。私はこれをさらなる読み物としてのみ提供します。


*を除いてinitWithCoder:、探しているすべての正確な人のために。

于 2012-06-23T19:34:09.380 に答える