在 Firebase 块外使用变量

Posted

技术标签:

【中文标题】在 Firebase 块外使用变量【英文标题】:Use Variable outside Firebase Block 【发布时间】:2018-04-18 16:05:59 【问题描述】:

大家好,我正在为我的 ios 项目使用 Firebase ... 当我查询数据库时,我在使用 Firebase 块之外的变量值时遇到了很多麻烦。

例如,在这种情况下,我试图从这个查询中获取一个数字值...

 FIRDatabaseReference *userDbRef = FIRDatabase.database.reference;
 [[[userDbRef child:RTDUSER] child:userID] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) 

     NSUInteger totalCFU = [snapshot.value[RTDUSER_TOTALCFU] unsignedIntegerValue];

 withCancelBlock:nil];

我需要这个数值也在块外获得(在这个类的其他函数中)...

如何在 firebase 块之外使用 TotalCFU 变量?

【问题讨论】:

【参考方案1】:

您可以从块内部调用方法来处理值。

FIRDatabaseReference *userDbRef = FIRDatabase.database.reference;
 [[[userDbRef child:RTDUSER] child:userID] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) 

    NSUInteger totalCFU = [snapshot.value[RTDUSER_TOTALCFU] unsignedIntegerValue];

    // Call a function to handle value
    [self doSomethingWithCFU: totalCFU];

 withCancelBlock:nil];

你班上的其他地方:

(void)doSomethingWithCFU:(NSUInteger)totalCFU 
    // Do something with the value

【讨论】:

您好,我尝试了您的建议,但如果我在块(外部)之后立即插入 nslog,totalCFU 将返回零值 正确,该值在块执行时设置。听起来您可能更喜欢我提到的替代方法。创建一个处理新值的方法。 好的,所以我不能通过保持相同的方法管理块外的变量? 没有。调用异步发生。到它完成时,您将退出该方法。 好的,那么当你写这篇文章时,你是什么意思“在街区之外”? // 设置值,使其可以在块外访问【参考方案2】:

使用__block 在外部使用您的变量。

FIRDatabaseReference *userDbRef = FIRDatabase.database.reference;
__block NSUInteger totalCF;
[[[userDbRef child:RTDUSER] child:userID] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) 

     totalCFU = [snapshot.value[RTDUSER_TOTALCFU] unsignedIntegerValue];

 withCancelBlock:nil];

【讨论】:

以上是关于在 Firebase 块外使用变量的主要内容,如果未能解决你的问题,请参考以下文章

将环境变量部署到 Firebase 托管

在组合 api 中使用注入变量(nuxt.firebase)

谷歌云构建不使用环境变量替换 Firebase 令牌

在 SwiftUI 应用程序上使用 firebase 数据初始化变量

带有firebase的JavaScript中的变量

Firebase Auth我的变量安全/安全吗?