Есть ли хороший способ проверить, когда переменная перестает менять свое значение после постоянного изменения в течение некоторого времени? - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь проверить переменную, объявленную как @property (assign, nonatomic) NSTimeInterval rate;, которая постоянно изменяется как счетчик времени.Другими словами, значение переменной непрерывно меняется по прошествии времени, я знаю, что могу использовать KVO с функцией - (void)observeValueForKeyPath:...}, чтобы наблюдать, когда переменная изменила свое значение, но мне также нужно знать, когда переменная перестает изменяться и становитсяпостоянная.Я попробовал один способ, который просто проверяет значение переменной после очень небольшого промежутка времени (например, 0,00001 секунды), используя NSTimer здесь

    - (void) checkPlaying:(NSTimer*)t {

        NSLog(@"%f %f", self.keepRate, (double)self.rate);
        return self.keepRate != (double)self.rate;
    }


    - (void) isPlaying{

    self.keepRate = (double)self.rate;
    [NSTimer scheduledTimerWithTimeInterval:0.00001
                                     target:self
                                   selector:@selector(checkPlaying:)
                                   userInfo:nil
                                    repeats:NO];
   }

, и сравнил его с предыдущим сохраненным значением, но это также делаетне работа;значения self.keepRate и (double)self.rate; остаются теми же в этом NSLog.Я думал, что это вызовет checkPlaying после 0,00001 секунды, но я мог бы что-то неправильно понять.Может ли кто-нибудь помочь?Или было бы хорошо, если бы кто-нибудь просто предложил проверить, когда переменная перестает изменяться.Спасибо

Редактировать: На самом деле, переменная начала менять свое значение, когда пользователь нажимал кнопку, и перестала изменять значение после того, как пользователь нажал ту же кнопку.Вот почему я думаю, что, может быть, мне понадобится 0,0001 секунды, чтобы проверить, изменилось ли значение переменной или нет.Я знал, что могу просто использовать кнопку, чтобы проверить, меняется ли значение или нет, но есть много проблем и вещей, которые нужно решить, если я это сделаю, и именно поэтому я задал эти вопросы вместо этого.

1 Ответ

0 голосов
/ 15 февраля 2019

Вот объявление класса

@interface MyClass : NSObject

@property (nonatomic) int keepRate;

@end

Ниже приведена реализация

@implementation MyClass
- (void)setKeepRate:(int)aKeepRate {
    int oldValue = _keepRate;
    if (oldValue == aKeepRate) {
        // The value is same as before, that means the value is constant now
        // Do whatever you want to do now
    }
    // Update underlaying variable with new value, regardless if it is same or not
    _keepRate = aKeepRate;
}
@end

Вы можете сделать то же самое для тарифа

...