我将代码从Xcode7.2转换为Xcode7.3时出错

时间:2016-04-27 16:37:11

标签: string swift xcode7.3

错误消息显示来自' 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)

2 个答案:

答案 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
    }