Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios “表达类型”;[“在没有更多上下文的情况下是不明确的_Ios_Swift_Firebase_Firebase Realtime Database_Struct - Fatal编程技术网

Ios “表达类型”;[“在没有更多上下文的情况下是不明确的

Ios “表达类型”;[“在没有更多上下文的情况下是不明确的,ios,swift,firebase,firebase-realtime-database,struct,Ios,Swift,Firebase,Firebase Realtime Database,Struct,我搜索过“表达式的类型在没有更多上下文的情况下是不明确的”,但没有一个实例可以帮助我解决问题 struct Ouid { let uid: String } public var completion: (Ouid) -> (Void)? var results = [Ouid]() func noteIsHere() { let safetyEmail = DatabaseManager.safeEmail(emailAddress: otherUse

我搜索过“表达式的类型在没有更多上下文的情况下是不明确的”,但没有一个实例可以帮助我解决问题

struct Ouid {
    let uid: String
}

public var completion: (Ouid) -> (Void)?
    var results = [Ouid]()



 func noteIsHere() {

    let safetyEmail = DatabaseManager.safeEmail(emailAddress: otherUserEmail)
    
    let recentUIDObserve = ref.child("\(safetyEmail)/uid")
    
    recentUIDObserve.observeSingleEvent(of: .value, with: { snapshot in
        guard let value = snapshot.value as? String else {
            return
        }
        
        print("this is value: \(String(describing: value))")

        
        let results: [Ouid] = value.compactMap({ dictionary in
            guard let uid = dictionary**[**"uid"] else {  // for some reason, the "Type of expression is ambiguous without more context" highlights at the bracket. 
            
                return nil
            }
        })
}
我不明白哪里出了问题,因为我试图在另一个视图控制器中使用compactMap从firebase调用数据,结果成功了

这是有效且没有错误的代码:

struct Users {
    let name: String
    let email: String
}

public var completion: ((Users) -> (Void))?

func usersAreHere() {

    let recentUserQuery = (ref?.child("user").queryLimited(toFirst: 11))!
    print("recentuserquery: \(recentUserQuery)")
    recentUserQuery.observeSingleEvent(of: .value, with: { snapshot in
        guard let value = snapshot.value as? [[String: String]] else {
           return
        }     
        
        print("\(value)")
        let results: [Users] = value.compactMap({ dictionary in
            guard let name = dictionary["name"]?.lowercased(),
                  let safeEmail = dictionary["email"] else {
                            return nil
                        }
 
            return Users(name: name, email: safeEmail)
        })
        self.results = results
        
        
        self.results.shuffle()
        

        self.tableView.reloadData()      
        
    })       
    
    self.results.append(contentsOf: results)
            
}

首先,compactMap将查询数组的所有元素

guard let value = snapshot.value as? String else {
    return
}
如您所见,value是一个字符串,因此当您使用value.compactMap({dictionary in})时,它将查询“value”的所有元素。“dictionary”是字符类型(字符串是字符数组),而不是字典。您不能使用[]

在第二个示例中:

guard let value = snapshot.value as? [[String: String]] else {
   return
}

value现在是一个字典数组([[String:String]]==Array),所以当你使用value.compactMap({Dictionary in},“Dictionary”是字典类型。现在你可以使用value[/key]来获取值了

非常感谢!关于这一点:“Dictionary”是字符类型(String是字符数组),而不是字典。您不能使用[]。那么我可以使用什么?Hi@personalproblem,如果您想在字典中获取“uid”,您应该使用与第二个示例中相同的方法,将snapshot.value解析为[[String:String]]