无法赋值:函数调用返回不可变值([[String:AnyObject]])

时间:2018-03-18 11:21:40

标签: ios swift firebase

为什么我会在第34行收到此错误? let postObject = [String:AnyObject] = ["

  

无法赋值:函数调用返回不可变值

    @IBAction func HandleSendButton(_ sender: Any) {
    let postRef = Storage.storage().reference().child("messages").child("\(selectedUser).[“id”]")

    let postObject = [[String:AnyObject]]() = [
        "From": [
            "uid": User.uid,
            "username": User.username,
            "photoURL": User.photoURL.absoluteString
        ],
        "Message": textView.text,
        "timestamp": [".sv":"timestamp"]
        ] as [String:Any]

    postRef.setValue(postObject, withCompletionBlock: { error, ref in
        if error == nil {
            self.dismiss(animated: true, completion: nil)
        } else {
            // Handle the error
        }
    })
}

4 个答案:

答案 0 :(得分:0)

只需删除let postObject = [ 部分:

let postObject: [String: Any] = [

dpkg-query --showformat='${Version}' --show rabbitmq-server

答案 1 :(得分:0)

应该是这样的:

let postObject

: [[String:AnyObject]]部分声明一个常量,=声明它的类型(注意不使用=),最后在for item1, item2, item3 in zip(list1, list2, list3): if item1 == item2: print(item3) 之后是初始化它的文字对象。 / p>

答案 2 :(得分:0)

有一些问题需要解决。

我们假设您的Firebase看起来像这样

def ninety_nine_bottles(n=99):
    for i in range(n, 0, -1):
        print(f'{i} bottles of beer on the wall, {i} of beer! You take one down, pass it around, {i-1} bottles of beer on the wall')

如果您想创建一个新问题节点,这将在该结构中创建

root
  questions
    uid_0
      From:
        photoUrl: "some photoUrl"
        uid: "some userid"
        username: "some username" 
      message: "some message"
      timestamp: "some timestamp"

有了这个,我们得到了uid并定义了对数据写入位置的引用。

然后简单使用字典; Firebase使用键:值对来存储它的数据,我们定义一个字典来包含一个键,它是一个字符串,值可以是一种Any。

let uid = Auth.auth().currentUser?.uid
let postRef = self.ref.child("questions").child(uid!) //self.ref is a class var*

let dict: [String: Any] = ["From":
    ["uid": "some uid",
     "username": "some username",
     "photoUrl": "some url"],
    "message": "some message",
    "timestamp": "some timestamp"
]

postRef.setValue(dict, withCompletionBlock: { error, ref in
    if error == nil {
        self.dismiss(animated: true, completion: nil)
    } else {
        // Handle the error
    }
})

这允许第一个元素是String:Dictionary,第二个和第三个元素是String:String。

* self.ref指向我的根Firebase节点。编辑指向你的。

答案 3 :(得分:0)

试试这个:

    let postObject: [String: Any] = [
    "From": [
        "uid": User.uid,
        "username": User.username,
        "photoURL": User.photoURL.absoluteString
        ] as [String: Any],
    "Message": textView.text,
    "timestamp": [".sv":"timestamp"]
    ] as [String: Any]

必要的变更是:

  • 删除最初的" ="和"()"
  • 替换" [String:AnyObject]"用" [String:Any]"
  • 施放" From"字典值为" as [String:Any]"

请告诉我这是否适合您。