错误消息显示来自' String的Downcast?!'到' String'只打开选项;你的意思是使用' !!'?我将String替换为NSArray,但它没有用。有谁知道如何解决这个问题?
returnFirebaseUrl(self.myRootRef).queryLimitedToLast(1000).observeEventType(FEventType.ChildAdded, withBlock: { (snapshot) in
self.showProgressHUD()
// 3 codes below are the reason why I got error for.
let text = snapshot.value["text"] as? String
let sender = snapshot.value["from"] as? String
let name = snapshot.value["name"] as? String
var isOutGoing:Bool
if sender == GetUserId(){
isOutGoing = true
}else{
isOutGoing = false
}
let mediaItem = self.createPhotoItem(Const.S3_URL + text!, isOutgoing: isOutGoing)
var message:JSQMessage
if text!.hasSuffix(".jpg"){
message = JSQMessage(senderId: sender, displayName: name, media: mediaItem)
}else{
message = JSQMessage(senderId: sender, displayName: name, text: text)
}
self.messages?.append(message)
答案 0 :(得分:0)
看起来您还需要解开snapshot.value
。
像这样的东西可能是:
guard let value = snapshot.value,
text = value["text"] as? String,
sender = value["from"] as? String,
name = value["name"] as? String else {
fatalError("Oops, one of the values was nil")
}
// here you can use unwrapped text, sender and name
答案 1 :(得分:0)
您需要解包snapshot.value才能将其用作词典。 作为指南使用'!'强行打开'是不安全的因为它可能导致崩溃。
您可以尝试的内容如下:
if let valueDictionary = snapshot.value as? Dictionary<String, AnyObject> {
let text = snapshot.value["text"] as? String //this will still be optional and might need to carefully unwrap
etc etc
}