我从Firebase中提取一些数据,将数据添加到循环中,然后在每个循环运行时打印秒数。有没有机会循环运行速度如此之快以至于它会打印两次相同的秒数?Swift iOS - 循环运行更快,然后由Date()生成Date Secs timeIntervalSince1970
例如,在下面的代码中是可能的结果?
image0__1507792099
image1__1507793000
image2__1507793001
image3__1507793001
image4__1507793002
image5__1507793002
既能图像2和图像3得到印有相同的时标,同样的事情图像4和图像5发生的呢?
var images:[String] = []
let secs = Int(Date().timeIntervalSince1970)
myRef?.observeSingleEvent(of: .value, with: {
(snapshot) in
if let dict = snapshot.value as? [String:Any]{
let image0 = dict["image0"] as? String
let image1 = dict["image1"] as? String
let image2 = dict["image2"] as? String
let image3 = dict["image3"] as? String
let image4 = dict["image4"] as? String
let image5 = dict["image5"] as? String
self.images.append(image0)
self.images.append(image1)
self.images.append(image2)
self.images.append(image3)
self.images.append(image4)
self.images.append(image5)
for image in self.images{
print("\(image)__\(self.secs)")
let x = someConversionMethodThatReturnsAnImage(str: image)
saveData(image: x)
}
}
}
fileprivate func saveData(image: UIImage){
let imageExt = String(describing: secs).appending(".jpg")
let fileManager = FileManager.default
let documentsPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first! as NSURL
let imagePath = documentsPath.appendingPathComponent(imageExt)?.path
let data = UIImageJPEGRepresentation(image, 0.8)
fileManager.createFile(atPath: imagePath!, contents: data, attributes: nil)
}
FYI我问这个问题的原因是因为我使用的是secs
作为扩展到火力地堡数据添加到DocumentsDirectory。一切工作正常,但我不确定是否可能存在时间上的重叠,这意味着如果某些数据都具有相同的时间戳,那么将拉取和保存的一些数据将被覆盖。我正在琢磨使用arc4Random来代替。
为什么不直接使用['UUID'](https://developer.apple.com/documentation/foundation/uuid)而不是时间戳或arc4Random:'let uuid = UUID()。uuidString' – ColGraff
@ColGraff感谢您的回复!在我发表的帖子的底部注意到了arc4Random。我知道我也可以使用uuid。我真的很想知道这种情况可能吗? –
我不会使用时间来唯一标识循环中的任何数据,除非我确定该循环比我的时间戳的粒度慢了几个数量级。如果发生这种情况,那就不值得。 'UUID'更安全,至少易于使用。它也被设计为这个用例,而不是通过'arc4Random'的一个简单的随机数。 – ColGraff