You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase数据库拼接用户姓名存值报错问题求助

解决Firebase存储fullName时的InvalidFirebaseData异常

这个问题我之前也碰到过,核心是你对Swift字符串运算符的用法搞错啦!你遇到的报错,本质是Firebase只接受特定类型的数据(NSNumber、NSString、NSDictionary、NSArray),但你给fullName字段传的是一个_SwiftValue类型的值——这是因为你用了+=运算符,这个操作是直接修改原字符串变量(把lastName追加到NameOu.text里),而不是返回拼接后的新字符串,所以实际上你传给Firebase的是一个无返回值的操作结果(Void类型),自然不符合要求。

修复方案:用+拼接字符串(或临时变量存储结果)

我们需要返回一个完整的拼接字符串给Firebase,有两种简单的修改方式:

方式1:直接用+运算符拼接

+运算符会返回拼接后的新字符串,正好符合Firebase的类型要求:

newUserReference.setValue([
    "eMail": self.EmailOu.text!,
    "firstName": self.NameOu.text!,
    "lastName": self.LastNameOu.text!,
    "studentId": self.StudentIDOu.text!,
    "Parking Zone": self.SignUpLabel.text!,
    "fullName": self.NameOu.text! + self.LastNameOu.text!, // 替换+=为+
    "uId": uidINT
])

方式2:用临时变量存储全名(更易维护)

如果后续需要对全名做更多处理,先把结果存到变量里会更清晰,还能顺便加个空格分隔名和姓,符合常规格式:

// 先拼接全名,加空格更符合日常使用习惯
let fullName = "\(self.NameOu.text!) \(self.LastNameOu.text!)"

newUserReference.setValue([
    "eMail": self.EmailOu.text!,
    "firstName": self.NameOu.text!,
    "lastName": self.LastNameOu.text!,
    "studentId": self.StudentIDOu.text!,
    "Parking Zone": self.SignUpLabel.text!,
    "fullName": fullName,
    "uId": uidINT
])

额外小建议:避免强制解包风险

直接用!强制解包文本框内容,如果用户没输入内容会导致程序崩溃,建议用空合运算符处理空值,给个默认的空字符串:

let firstName = self.NameOu.text ?? ""
let lastName = self.LastNameOu.text ?? ""
let fullName = "\(firstName) \(lastName)"

这样即使输入框为空,也不会触发崩溃,代码更健壮。

内容的提问来源于stack exchange,提问作者SergioHNunez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:30:25