2016-07-09 10 views
0

Ich habe ein Array, in dem ich Timestamps speichern möchte.AnyObject im Array speichern?

Ich teste Zeug mit so etwas wie:

@IBAction func buttonPressed(sender:UIButton!) { 

    let post = ["MinutesLeft" : (FIRServerValue.timestamp())] 
    DataService.ds.REF_POSTS.childByAutoId().setValue(post) 

} 

Dann versuche ich es zurück zu rufen und ein Array mit einigen dieser Zeitstempel füllen:

DataService.ds.REF_POSTS.queryOrderedByChild("MinutesLeft").queryStartingAtValue(Int(cutoff)).observeEventType(.ChildAdded, withBlock: { (snapshot:FIRDataSnapshot) in 

    let post = snapshot.value!["MinutesLeft"] 

     print("POST \(post)") 

     self.postsArray.append(post) 
      print(self.postsArray) 
     } else { 
      print("Didn't work") 
     } 

    }) 

Dann habe ich‘ m läuft ein Timer, der räumen bestimmte Stellen gemeint:

func removeExpiredItems() { 
    let cutoff = UInt64(1000 * floor(NSDate().timeIntervalSince1970) - 10*60*1000) 

    while (self.postsArray.count > 0 && self.postsArray[0] < cutoff) { 
     // remove first item, because it expired 
     self.postsArray.removeAtIndex(0) 
     print(postsArray.count) 
    } 

} 

Meine Fragen sind:

Ich weiß nicht, welche Art von Array hier zu haben. Es sagt mir, dass ein Timestamp ein AnyObject ist, aber wenn ich ein Array von irgendwelchen Objekten mache, bekomme ich einen direkten Xcode internen Fehler Absturz ... also ich denke das ist ein No-Go.

Ich kann alles in Strings übersetzen und es einfach so speichern, aber das Problem kommt dann, wenn ich versuche, die Zeiten vs meine Cutoff in meiner removeExpiredItems Funktion zu vergleichen.

Ich habe versucht, wie etwas zu tun:

die Zeitstempel nehmen, sie in eine Zeichenfolge ändern, dann nach unten, wenn ich den Vergleich machen werde den String auf ein Int ändern, aber ich bekomme so etwas wie „Diese Art der Konvertierung wird immer fehlschlagen ".

Irgendwelche Ideen hier?

+0

ich glaube, Sie den Wert auf UInt64 ändern sollten, bevor vergleichen. let aTime = UInt64 (self.postsArray [0]) – xmhafiz

+0

für die Verwendung von AnyObject typed Array zum Speichern von Zeitintervallwerten müssen Sie NSNumber verwenden, um Werte zu umbrechen. Lassen Sie arr: [AnyObject] = [NSNumber (double: 1.0)] –

+0

@ AliKıran Ahhh okay, ich sehe. Das macht mehr Sinn. Xcode mochte NICHT, was ich zu tun versuchte. Dank Ihnen beiden – Noowoo

Antwort

1
let post = snapshot.value!["MinutesLeft"] 

Die Art der post wird AnyObject, (Optional<AnyObject>) in diesem Fall sein.

Sie haben es als den gewünschten Datentyp gespeichert. Zum Beispiel in diesem Fall können Sie speichern Sie es als NSTimeInterval

let post = snapshot.value!["MinutesLeft"] as! NSTimeInterval 

und speichern sie in einem Array von NSTimeInterval als

var postsArray :[NSTimeInterval] = [] 
Verwandte Themen