others-how to solve Type of expression is ambiguous without more context with swift?

1. Purpose

In this post, I would show how to solve this problem:

Type of expression is ambiguous without more context

2. Environment

  • Mac OS 10.15
  • Swift 5
  • Xcode 12

3. The solution

3.1 The code that cause the problem

    func processJson(json:Any) -> Void {
        if let myJsonDict = json as? [String:Any] {
            let requestId = myJsonDict["requestId"]
            if let myMessageListArray = myJsonDict["messageList"] as? [Any] {
                for msg in myMessageListArray {
                    if let msgJsonDict = msg as? [String:Any] {
                        let body = msgJsonDict["body"]
                        let fromAddress = msgJsonDict["fromAddress"]
                        print("msg body \(body), fromAddress \(fromAddress)")
                        self.addNewMessage(theMessageContent: body, theFromAddress: fromAddress) 
                    }
                }
            }
        }
    }

The problem occurred at these lines:

let body = msgJsonDict["body"]
let fromAddress = msgJsonDict["fromAddress"]

3.2 The solution

Here is the code that compiles ok:

   func processJson(json:Any) -> Void {
        if let myJsonDict = json as? [String:Any] {
            let requestId = myJsonDict["requestId"]
            if let myMessageListArray = myJsonDict["messageList"] as? [Any] {
                for msg in myMessageListArray {
                    if let msgJsonDict = msg as? [String:Any] {
                        let body = msgJsonDict["body"] as! String //key point
                        let fromAddress = msgJsonDict["fromAddress"] as! String //key point
                        print("msg body \(body), fromAddress \(fromAddress)")
                        self.addNewMessage(theMessageContent: body, theFromAddress: fromAddress)
                    }
                }
            }
        }
    }

Here is the key point:

let body = msgJsonDict["body"] as! String //key point
let fromAddress = msgJsonDict["fromAddress"] as! String //key point

Now it works!

4. Summary

In this post, I demonstrated how to solve Type of expression is ambiguous without more context problem when using swift to do some dict jobs.