Je ne suis pas développeur iOS mais j'ai commencé à apprendre Swift.
J'essaie de convertir une logique d'un projet Android vers iOS
J'ai méthode suivante:
func addGroupItemSample(sample : WmGroupItemSample){ // some custom class
var seconds: NSTimeInterval = NSDate().timeIntervalSince1970
var cuttDate:Double = seconds*1000;
var sampleDate: UInt64 = sample.getStartDate(); // <-- problematic place
if(sampleDate > cuttDate){
// ....
}
}
De la méthode ci-dessus, vous pouvez voir que sample.getStartDate()
renvoie le type UInt64
.
Je pensais que c'était comme long
en Java: System.currentTimeMillis()
Mais l’heure actuelle en millisecondes est définie par Double
.
Est-ce la bonne façon de mélanger Double
et UInt64
ou ai-je besoin de représenter toutes les millisecondes sous la forme Double
uniquement?
Merci,
Swift ne permet pas de comparer différents types.
seconds
est une valeur Double
en virgule flottante exprimée en secondes avec une précision inférieure à la seconde.sampleDate
est un UInt64 mais les unités ne sont pas renseignées .sampleDate
doit être converti en une valeur à virgule flottante Double
avec des unités de secondes.
var sampleDate: Double = Double(sample.getStartDate())
Ensuite, ils peuvent être comparés:
if(sampleDate > cuttDate){}
dans iOS, il est préférable d'utiliser double, mais vous pouvez essayer ceci:
func currentTimeMillis() -> Int64{
let nowDouble = NSDate().timeIntervalSince1970
return Int64(nowDouble*1000)
}
Voici une version alternative, pour Swift 3:
/// Method to get Unix-style time (Java variant), i.e., time since 1970 in milliseconds. This
/// copied from here: http://stackoverflow.com/a/24655601/253938 and here:
/// http://stackoverflow.com/a/7885923/253938
/// (This should give good performance according to this:
/// http://stackoverflow.com/a/12020300/253938 )
///
/// Note that it is possible that multiple calls to this method and computing the difference may
/// occasionally give problematic results, like an apparently negative interval or a major jump
/// forward in time. This is because system time occasionally gets updated due to synchronization
/// with a time source on the network (maybe "leap second"), or user setting the clock.
public static func currentTimeMillis() -> Int64 {
var darwinTime : timeval = timeval(tv_sec: 0, tv_usec: 0)
gettimeofday(&darwinTime, nil)
return (Int64(darwinTime.tv_sec) * 1000) + Int64(darwinTime.tv_usec / 1000)
}
func get_microtime() -> Int64{
let nowDouble = NSDate().timeIntervalSince1970
return Int64(nowDouble*1000)
}
Fonctionne bien