【问题标题】:Value of String won't change in Swift despite clear declaration [duplicate]尽管声明明确,但 Swift 中的 String 值不会改变 [重复]
【发布时间】:2018-08-06 01:25:27
【问题描述】:

我正在制作一个应用程序,我必须在其中返回一个字符串,表示存在对我的 firebase 实时数据库的某个引用(出于其他原因,我没有使用 Bool)。尽管直接在上面和下面执行打印命令,但当我打印函数时,字符串的值不会改变并打印其默认值“Unchanged”。

我的代码:

func checkIfMovieHasAlreadyBeenShown(movieID: String) -> String {

    var hasItBeenSeen = "Unchanged"
    let uid  = Auth.auth().currentUser?.uid
    let ref = Database.database().reference()
    ref.child("Seen Movies").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in

        if snapshot.hasChild(movieID){
            print("The Result:")
            self.changeStringHasItBeenSeen(YNString: "yes")
            print("YES")
        }

        else {
            print("The Result:")
            self.changeStringHasItBeenSeen(YNString: "no")
            print("NO")
        }
    })

    return hasItBeenSeen
}

打印在这里:

print(checkIfMovieHasAlreadyBeenShown(movieID: "39"))
print(checkIfMovieHasAlreadyBeenShown(movieID: "38"))

【问题讨论】:

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

observeSingleEvent 在闭包中被调用。 return hasItBeenSeen 行不会受到闭包中的任何内容的影响,因为它将首先返回。

想象一下:你告诉你的朋友去买些苹果。在他离开之前,你问他要价。当然,他不会知道,因为他还没有去买苹果。

在调用闭包之后(或在购买苹果之后),您需要某种方式来执行某些操作。通常这可以通过一个完成处理程序来完成,您将一个闭包传递给您的checkIfMovieHasAlreadyBeenShown 函数,例如,“在您购买苹果之后执行此操作”。

然后你可以这样调用你的函数:checkIfMovieHasAlreadyBeenShown(movieID: "39", completion: { seen in print(seen) })

【讨论】:

  • 喜欢苹果的比喻。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-26
相关资源
最近更新 更多