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
相关产品推荐
相关产品推荐

