input'Any?' 没有下标成员(使用Firebase)
每次我运行这行代码都行不通,任何能帮助我的人都可以改变它呢? 谢谢你的帮助。 🙂
以下是我不断收到的错误
inputAny? 没有下标成员
var ref:FIRDatabaseReference? var refHandle: UInt! var postData = [String]() override func viewDidLoad() { super.viewDidLoad() ref = FIRDatabase.database().reference() refHandle = ref?.observe(FIRDataEventType.value, with: { (snapshot) in let dataDict = snapshot.value as! [String: AnyObject] print(dataDict) }) let username: String = (FIRAuth.auth()?.currentUser?.uid)! ref?.child("Users").child(username).observeSingleEvent(of: .value, with: { (snapshot) in let username = snapshot.value!["Username"] as! String self.usernameField.text = username }) }
两个问题。
1.可选项
这就是Swift使variables处于两种状态之一的方式,即有值或nil
。 variables只能处于这些状态之一。 您可以通过在其前面添加一个问号来使variables成为可选项。
2.任何
通过声明一个variables为Any
types,这意味着你在声明中没有明确地声明它的types。 Firebase使其所有的回报都是Any
types的,以便让我们的开发人员可以select摆弄数据,所以请尽量减less我们的限制。
snapshot.value
的types为Any
但是Firebase总是返回一个JSON树,JSON树可以表示为字典 。 那我们该怎么办?
- 由于
snapshot.value
是可选的,我们应该首先检查是否nil
。 - 如果不是
nil
,则将其转换为字典,然后开始访问其中的相应元素。
下面的代码为你做了这个工作,我已经添加了评论来解释发生了什么。
ref?.child("Users").child(username).observeSingleEvent(of: .value, with: { (snapshot) in // This does two things. // It first checks to see if snapshot.value is nil. If it is nil, then it goes inside the else statement then prints out the statement and stops execution. // If it isn't nil though, it converts it into a dictionary that maps a String as its key and the value of type AnyObject then stores this dictionary into the variable firebaseResponse. // I used [String:Any] because this will handle all types of data types. So your data can be Int, String, Double and even Arrays. guard let firebaseResponse = snapshot.value as? [String:Any] else { print("Snapshot is nil hence no data returned") return } // At this point we just convert the respective element back to its proper data type ie from AnyObject to say String or Int etc let userName = firebaseResponse["Username"] as! String self.usernameField.text = username })
- 确定在UIActivityViewController中点击了哪个图标
- 当尝试产生一个节点时,“尝试添加一个已经有父节点的SKNode”错误
- 迅捷周:08.19〜08.15
- 在Swift的AVPlayerViewController中从Youtube播放video
- FBSDK(新Facebook SDK 4.0)实施不适用于使用Facebooklogin
- Xcode 7.3中的自动完成框中不存在第一次类名
- iPhone:如何将照片转换为铅笔画
- glkView:drawInRect:和glkViewControllerUpdate之间的区别? OpenGL ES 2 – iOS
- 如何获取UIImagePickerController所选图像的原始文件名?