【问题标题】:swift Function returns empty [duplicate]swift函数返回空[重复]
【发布时间】:2021-03-27 03:26:19
【问题描述】:

我正在尝试设置一个辅助函数。这个应该返回搜索历史的结果。 但它总是返回一个空数组。控制台中的打印显示了一个完整的数组。看来,return 执行得早了。

 static func getSearchHistorySorted(userID: String) -> [String]{
            var searchHistory = [String]()
                databaseReference.child("\(userID)/searchhistory").queryOrderedByValue().queryLimited(toFirst: 6).observeSingleEvent(of: .value, with: { (snapshot) in
                    if let entries = snapshot.value as? [String : Double]  {
                        let myArr = Array(entries.keys)
                        let sortedKeys = myArr.sorted() {
                            let obj1 = entries[$0] // get ob associated w/ key 1
                            let obj2 = entries[$1] // get ob associated w/ key 2
                            return obj1! < obj2!
                        }
                        searchHistory = sortedKeys
                        print(searchHistory)
                    }
                })
            return searchHistory
        }

【问题讨论】:

  • print(searchHistory) 替换为print("Inside closure: \(searchHistory)") 并将return searchHistory 替换为print("Outside and after the closure: \(searchHistory)"); return searchHistory 应该先打印哪个?哪一个是现实印出来的?您缺少异步概念。寻找应该会给你很多答案的“Swift + Async + Closure”。
  • 在封闭内打印 ["Henrik","Mirco","Tim"] 在外面 []

标签: swift xcode function return


【解决方案1】:

你不能做你想做的事。函数observeSingleEvent(of:with:) 是异步的。它需要一个闭包(完成后执行的代码)然后立即返回。

您需要重构代码以获取完成处理程序。这一直出现。有关示例,请参阅此问题和答案:

Async return function in Swift 4

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 2016-11-21
    • 2019-02-28
    相关资源
    最近更新 更多