【问题标题】:Sort array with Int [duplicate]使用 Int 对数组进行排序 [重复]
【发布时间】:2019-06-11 11:47:33
【问题描述】:

我想将具有最高时间戳的数组排序到最低时间戳。首先,我想从 Firebase 获取所有数据并将其添加到数组中,当获取所有数据时,我想对数组进行排序。当我尝试这样做时,我会在posts.sort(by: {$0.timestamp > $1.timestamp}) 行收到此错误:

二元运算符 '>' 不能应用于两个 'Int?'操作数

这是我的代码:

var posts: [Post] = []

Api.MyPosts.fetchMyPosts(userId: self.userId) { (key) in
     Api.Post.observePost(withId: key, completion: {
         post in
         self.posts.insert(post, at: 0)
         self.tableView.reloadData()
      })        
      posts.sort(by: {$0.timestamp > $1.timestamp})       
 }

有人知道我如何修复这个错误并将时间戳保持为 int 吗?

【问题讨论】:

  • posts.sort(by: {$0.timestamp ?? 0 > $1.timestamp ?? 0})
  • 一些事情。该问题询问 Firebase,但没有显示 Firebase 代码。其次,我们不知道您的 Post 类是如何定义的。此外,该代码似乎没有阅读帖子,看起来它只阅读了一篇。最后——这是最重要的。您想在代码中对数据进行排序,还是希望 Firebase 以降序显示数据?关于该特定主题,这里有很多关于 SO 的解决方案。
  • 您的 int var 似乎是可选的。如果保证始终有一个值,请像 var int = 0 或像 var num: Int! 这样定义它,这也将处理该错误。如果它是从 Firebase 填充的,请执行此操作 let timestamp = firebase_stuff.value as? Int ?? 0

标签: arrays swift firebase sorting


【解决方案1】:

你需要unwraptimestamp,因为它是一个optional Int值,即

posts.sort {
    guard let t1 = $0, let t2 = $1 else {
        return false
    }
    return t1 > t2
}

【讨论】:

  • 这不是一个好建议,行为将是未定义的。谓词不是 sort 方法所要求的“严格弱排序”。违反了“传递不可比性”条件。 (还有一个错字:第二个$0 应该是$1。)
猜你喜欢
  • 2011-11-16
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 2021-07-25
  • 2013-03-10
  • 1970-01-01
相关资源
最近更新 更多