目的の -cを使用しているため、いつでも目的どおりのオブジェクトを作成できます (例の下のクラスを参照)。このようにすることの主な利点は、整数が設定されるたびにすべての整数をチェックする必要がないことです。変更された各番号をチェックして、変更が多すぎるかどうかを確認するだけです。
使用例:
// myNumbers.confined will be true until you create a number, and THEN change it by 30 or more.
ARConfinedNumbers *myNumbers = [ARConfinedNumbers new];
[myNumbers addNumber:10];
[myNumbers addNumber:20];
[myNumbers addNumber:30];
[myNumbers replaceNumberAtIndex:0 withObject:40];
// No longer confined because we have changed 10 to 40
if (!myNumbers.confined)
NSLog(@"Not confined.");
// Reset
[myNumbers setConfined:YES];
これを行うために私が書いたクラスは次のとおりです。iOS/MacOS 向けにプログラミングしていると仮定してを使用したことに注意してくださいNSArray
。これらのクラスを使用していない場合は、NSArray を別のものに置き換えることができます。ただし、これは優れた出発点となるはずです。
ARConfinedNumbers.h:
#import <Foundation/Foundation.h>
@interface ARConfinedNumbers : NSObject
// confined is true if the numbers have not been changed by more than 30.
// This can be reset by setting it to YES.
@property (nonatomic, assign) BOOL confined;
// Methods to manipulate the set of numbers
// Add more array-type-methods as needed
- (void)addNumber:(int)number;
- (void)replaceNumberAtIndex:(NSUInteger)index withObject:(int)number;
- (int)numberAtIndex:(NSUInteger)index;
- (NSUInteger)count;
@end
ARConfinedNumbers.m
#import "ARConfinedNumbers.h"
/* Private Methods */
@interface ARConfinedNumbers()
@property (nonatomic, strong) NSMutableArray *numbers;
@end
@implementation ARConfinedNumbers
- (id)init
{
self = [super init];
if (self)
{
_confined = YES;
_numbers = [NSMutableArray new];
}
return self;
}
- (void)addNumber:(int)number
{
[self.numbers addObject:@(number)];
}
- (void)replaceNumberAtIndex:(NSUInteger)index withObject:(int)number
{
if (index < self.numbers.count)
{
if (number)
{
int existingNumber = [self.numbers[index] intValue];
if (abs(existingNumber - number) >= 30)
self.confined = NO;
[self.numbers replaceObjectAtIndex:index withObject:@(number)];
}
}
}
- (int)numberAtIndex:(NSUInteger)index
{
if (index < self.numbers.count)
return [self.numbers[index] intValue];
return 0;
}
- (NSUInteger)count
{
return self.numbers.count;
}
@end