2012-02-20 6 views
1

Некоторые вещи, как это:Как я могу сравнить два объекта типа NSTimeInterval

@property (nonatomic,assign) NSTimeInterval *startTime; 

AVAudioPlayer *player; 

И я хочу сделать это

if (self.player.currentTime > sub.startTime) { 
    do something... 
} 

Я думаю, что они оба NSTimeInterval тип данных, почему я не могу сделай это?

Если изменить код вверх, как этот

if (self.player.currentTime > 5) { 
    do something... 
} 

Это может очень хорошо работает.

ответ

4

NSTimeInterval всего лишь typedef double. Это не объект Objective-C, поэтому вы должны, вероятно, не использовать указатель как ваше свойство. Вы должны просто использовать простой NSTimeInterval:

@property (nonatomic) NSTimeInterval startTime; 
+0

Большое спасибо. И я исправил это так. @property (неатомный, копия) NSString * startTime; если (self.player.currentTime> [sub.startTime doubleValue]) { сделайте что-нибудь ... } И все готово. –

2

NSTimeInterval объявлен как этот

typedef double NSTimeInterval; 

Вы можете реализовать некоторый вспомогательный метод как этот

static double NSTimeIntervalEqualCompareThreshold = 0.01; 

NSComparisonResult NSTimeIntervalCompare(NSTimeInterval time1, NSTimeInterval time2) 
{ 
    if (abs(time2 - time1) < NSTimeIntervalEqualCompareThreshold) { 
     return NSOrderedSame; 
    } else if (time1 < time2) { 
     return NSOrderedAscending; 
    } else { 
     return NSOrderedDescending; 
    } 
} 
+1

Возможно, использовать 'DBL_EPSILON' вместо' NSTimeIntervalEqualCompareThreshold'. – Vive

+0

В чем причина создания чего-то типа NSTimeInterval, если он только обертывает 'double'? – Crashalot

Смежные вопросы