我有一个PFUser的子类- MYUser类,带有Equatable函数的实现,用于以这种方式比较objectIds:
func ==(left: MYUser, right: MYUser) -> Bool {
return left.objectId == right.objectId
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用Array.contains()方法时,它不会调用Equatable函数的这个实现,这会导致不正确的结果.例如,这里:
let hasUser = self.selectedUsers.contains(currentUser)
Run Code Online (Sandbox Code Playgroud)
如果selectedUsers数组包含不同的内存对象但是与currentUser中的 objectId相同,则hasUser变为false.
有趣的是,Equatable函数实现在直接使用中被调用.这里:
var hasUser = false
for itUser in self.selectedUsers {
if itUser == currentUser {
hasUser = true
break
}
}
Run Code Online (Sandbox Code Playgroud)
成功调用了==运算符,并且hasUser具有不同内存对象的正确值,但具有相同的objectId
它可能是什么原因?
UPDATE.这是MYUser课程:
class MYUser: PFUser {
// MARK: - Parse Object
@NSManaged var avatarFile: PFFile?
@NSManaged …Run Code Online (Sandbox Code Playgroud) 我发现DateFormatter date(from:)方法无法解析几个特定的日期.方法返回nil1981年至1984年的第一个月.这是基金会的错误吗?我们可以做些什么来解析这些日期?
我尝试.onCreate在Firebase云功能中实现firebase云功能codeLab(https://codelabs.developers.google.com/codelabs/firebase-cloud-functions/#7)
exports.addWelcomeMessages = functions.auth.user().onCreate(event => {
const user = event.data;
console.log('user: %j', user);
const fullName = user.displayName;
return admin.database().ref('messages').push({
name: 'Firebase Bot',
text: `${fullName} signed in for the first time! Welcome!`
});
});
Run Code Online (Sandbox Code Playgroud)
在我的客户端iOS应用程序中,我使用FirebaseUI的电子邮件身份验证流程,要求用户输入他的电子邮件,名称和密码进行注册.用户注册后,.onCreate云功能触发器触发,但user结构不包含displayName数据:
user: {"email":"my@gmail.com","metadata":{"createdAt":"2017-04-05T05:30:05.000Z","lastSignedInAt":"2017-04-05T05:30:05.000Z"},"uid":"wpIPNvf2suQdMumsEyXA5lQatt23"}
Run Code Online (Sandbox Code Playgroud)
注意:注册过程后,iOS应用中当前用户实例中的displayName属性FIRUser正确填充.
我认为FirebaseUI中的某种错误是首先使用电子邮件创建一个空用户,触发.onCreate触发器并且仅在此填充displayName属性之后.是吗?
如果没有,可能是什么原因造成的?
ios firebase firebase-authentication firebase-realtime-database