user1007522
user1007522

Reputation: 8118

Cannot convert value of type to expected argument Firebase

I'm converting my Swift 2 project to Swift 3. Now I'm using Firebase for my data and I'm having this function:

self.ref.child("languages").observeSingleEvent(of: .value, with: { (snapshot) in
            let languages = snapshot.value as! [String : AnyObject]
            var languageList = [Language]()
            for (key, value) in languages {
                let tempLanguage = Language()
                tempLanguage.objectId = key
                tempLanguage.code = value["code"] as! String
                tempLanguage.desc = value["fulldesc"] as! String
                languageList.append(tempLanguage)
            }
            handler(success: languageList, failure: nil)
        }) { (error) in
            handler(nil, error)
        }

This was fine in swift 2, but now in Swift 3, I get an error on the line in. The error is as follows:

Cannot convert value of type (AnyObject?) -> Void to expected argument type ((Error) -> Void)?

I deleted the function and with autocomplete, I wrote it again and it's the same problem.

Upvotes: 1

Views: 2076

Answers (1)

Dravidian
Dravidian

Reputation: 9945

Just change your code to :-

 FIRDatabase.database().reference().child("languages").observeSingleEvent(of: .value, with: { (snapshot) in

        let languages = snapshot.value as! [String : AnyObject]
        var languageList = [Language]()
        for (key, value) in languages {
            let tempLanguage = Language()
            tempLanguage.objectId = key
            tempLanguage.code = value["code"] as! String
            tempLanguage.desc = value["fulldesc"] as! String
            languageList.append(tempLanguage)
        }
        handler(success: languageList, failure: nil)

        }, withCancel: {(error) in

          handler(nil, error)        

    })

Upvotes: 1

Related Questions