Firebase iOS Swift - 将 Atname 更新功能添加到设置

Posted

技术标签:

【中文标题】Firebase iOS Swift - 将 Atname 更新功能添加到设置【英文标题】:Firebase iOS Swift - Adding Atname Update Function to Settings 【发布时间】:2021-06-22 05:59:05 【问题描述】:

使用 Firebase 和 Swift,我正在尝试更新 Firebase 中的“atname”数据。目前,该功能目前设置为修改 Firebase 中的“用户名”和“简历”部分。以下代码在我的 SettingsViewModel.swift 文件中:

func updateDetails(field: String)
        alertView(msg: "Update \(field)")  (txt) in
            
            if txt != ""
                self.updateBio(id: field == "Name" ? "username" : "bio", value: txt)
            
            
        
    
    
    func updateBio(id: String, value: String)
        ref.collection("Users").document(uid).updateData([
        
            id: value,
        ])  (err) in
            if err != nilreturn

            fetchUser(uid: self.uid)  (user) in
                self.userInfo = user
            
        
    

“用户名”是 Firebase 数据库中的名称。在 ? 之前添加“名称”以便在 alertView 中更好地了解用户正在更新的内容。

这是我的 SettingsView.swift 文件中的代码:(在应用程序上看到的部分)

  HStack(spacing: 15)
                
                Text(settingsData.userInfo.username)
                    .font(.title)
                    .fontWeight(.bold)
                    .foregroundColor(.white)
                
                Button(action: settingsData.updateDetails(field: "Name")) 
                    Image(systemName: "pencil.circle.fill") //makes text off centered, figure out how to fix
                        .font(.system(size: 24))
                        .foregroundColor(.white)
                
            
            
            HStack(spacing: 15)
                
                Text(settingsData.userInfo.atname)
                    .foregroundColor(.white)
                    .fontWeight(.light)
                
                Button(action: settingsData.updateDetails(field: "Atname")) 
                    Image(systemName: "pencil.circle.fill") //makes text off centered, figure out how to fix
                        .font(.system(size: 24))
                        .foregroundColor(.white)
                
            
            .padding()

            HStack(spacing: 15)
                
                Text(settingsData.userInfo.bio)
                    .foregroundColor(.white)
                
                Button(action: settingsData.updateDetails(field: "Bio")) 
                    Image(systemName: "pencil.circle.fill") //makes text off centered, figure out how to fix
                        .font(.system(size: 24))
                        .foregroundColor(.white)
                
            

如您所见,在 SettingsView.swift 中,Atname 部分的字段是“Atname”。但是,在 SettingsViewModel.swift 中,我无法弄清楚如何将 Atname 添加到代码中以使 Atname 在 Firebase 中实际更新。

每当我尝试添加“Atname”时,我都会遇到某种错误。如果启动应用程序并尝试在设置中编辑“Atname”,它会更改“bio”。我对 Swift 比较陌生,我不知道如何让它工作。

任何帮助将不胜感激!如果需要,我可以提供更多代码/详细信息。

【问题讨论】:

【参考方案1】:

目前,由于您使用的是三元表达式,id 的唯一两种可能是“用户名”或“生物”。

我建议重构 updateDetails 以便它可以接受更多类型的输入。我看到您还显示了一条消息alertView,这看起来像是您尝试将实际字段名称转换为更易于阅读的内容的原因——我添加了另一个名为readableNameForField 的函数,它使用switch提供可读名称的语句。

这样的事情呢?

func readableNameForField(_ field : String) -> String 
  switch field 
    case "username":
      return "Name"
    case "atname":
      return "At Name"
    default:
      return field.localizedCapitalized
  


func updateDetails(field: String)
  alertView(msg: "Update \(readableNameForField(field))")  (txt) in
    if !txt.isEmpty 
      self.updateBio(id: field, value: txt)
    
  

然后,在您的呼叫站点,您将使用实际的字段名称:

settingsData.updateDetails(field: "username")
settingsData.updateDetails(field: "atname")
settingsData.updateDetails(field: "bio")

【讨论】:

非常感谢!我稍后再试试。我正在研究 Swift 文档,并阅读了一些关于三元表达式的内容 - a ?乙:丙。但是,我不知道用什么代替它。非常感谢! 一旦您有机会查看它,如果它适合您,您可以使用绿色复选标记将其标记为正确/已接受。

以上是关于Firebase iOS Swift - 将 Atname 更新功能添加到设置的主要内容,如果未能解决你的问题,请参考以下文章

FIREBASE 数据库 - 将唯一密钥存储到子节点(Swift/IOS)

如何通过 iOS(swift)将 Firebase Auth 与 MySQL DB 同步?

将firebase数据添加到ios swift中的数组

Firebase、iOS 和 Swift 入门

swift 4如何将firebase Crashlytics用于多个标识符IOS的多个捆绑标识符

Firebase 自定义声明 IOS 和 swift