我有一个从Firebase获取和解析数据的函数。我有一个验证" parseUserModel)返回" Bool"如果模型符合要求,则键入。我将此值设置为bool类型的validUser。我拉的模型实际上是通过并返回一个true的布尔值。
问题发生在哪里。
If(validUser) { ... code ... } fails even though the validUser is "true".
我已经玩过实际的返回类型,我尝试过这些:
我完全没有想到为什么这会失败。我将原始类型(我假设)与另一种原始类型进行比较。
我的问题
检索数据功能
public static func retrieveUserData(user:UserModel, completion:(success:Bool)->Void){
if(user.username != nil){
let fbRef = Firebase(url: GlobalVariables().FB_BASE_URL+"users/\(user.username)")
fbRef.observeSingleEventOfType(FEventType.Value, withBlock: { (snapshot) -> Void in
if(snapshot.value != nil){
let validUser:Bool = UserModel.sharedInstance.parseUserData(JSON(snapshot.value))
println(validUser)
println(validUser.boolValue)
if(validUser.boolValue){
completion(success: true)
} else {
completion(success: false)
}
}
})
}
}
解析模型和验证
public func parseUserData(data:JSON) -> Bool {
var uName:String!
var uFullName:String!
if let username = data["username"].string {
UserModel.sharedInstance.username = username
}
if let fullName = data["fullName"].string {
UserModel.sharedInstance.fullName = fullName
} else {
return false
}
if let biography = data["biography"].string {
UserModel.sharedInstance.biography = biography
}
if let email = data["email"].string {
UserModel.sharedInstance.email = email
}
if let plistID = data["playlistCollectionID"].string {
UserModel.sharedInstance.playlistCollectionID = plistID
} else {
//generate a playlistCollectionID because the user doesn't have one
UserModel.sharedInstance.playlistCollectionID = NSUUID().UUIDString
}
if(UserModel.validateUserObject(UserModel.sharedInstance)) {
return true
} else {
return false
}
}
来自Xcode的Println()日志 真正 真
以上两个都来自检索代码 println(validUser)和println(validUser.boolValue)
答案 0 :(得分:2)
Swift中的Bool类型符合BooleanType,其成员为:
var boolValue: Bool { get }
存储在validUser中的值肯定是Bool,否则你将无法将它放在Bool类型的变量中。
此处最可能的情况是您的代码中存在错误。再次检查它并确保它实际上进入了else块而不是if块。
作为旁注,if语句的Swift格式约定如下所示:
if condition {
...
} else {
...
}
而不是if(condition){...
答案 1 :(得分:0)
由于我自己的愚蠢,我将共享用户实例UserModel发送到自身。
private static func validateUserObject(object:UserModel) -> Bool {
println(object.username)
println(object.fullName)
if(object.username != nil && object.fullName != nil){
return true
} else {
return false
}
}
所以我会这样称呼这个方法......
UserModel.sharedInstance.validateUserObject(self)
这会导致Function specialization爆炸。这不会导致应用程序崩溃(这是一个奇怪的部分)。它会继续并返回真正的布尔值(因为模型是有效的)。