var data: NSDictionary =
NSJSONSerialization.JSONObjectWithData(responseData, options:NSJSONReadingOptions.AllowFragments, error: error) as NSDictionary;
This line of code gives me error
NSError is not convertable to NSErrorPointer.
So I then thought to change the code to:
var data: NSDictionary =
NSJSONSerialization.JSONObjectWithData(responseData, options:NSJSONReadingOptions.AllowFragments, error: &error) as NSDictionary;
which would turn the NSError error into a NSErrorPointer. But then I get a new error and cannot make sense of it:
NSError! is not a subtype of '@|value ST4'
These types and methods have changed a lot since Swift 1.
NS
prefix is droppedThis results in the following code:
do {
let object = try JSONSerialization.jsonObject(
with: responseData,
options: .allowFragments)
if let dictionary = object as? [String:Any] {
// do something with the dictionary
}
else {
print("Response data is not a dictionary")
}
}
catch {
print("Error parsing response data: \(error)")
}
Of, if you don't care about the specific parsing error:
let object = try JSONSerialization.jsonObject(
with: responseData,
options: .allowFragments)
if let dictionary = object as? [String:Any] {
// do something with the dictionary
}
else {
print("Response data is not a dictionary")
}
Original Answer
Your NSError has to be defined as an Optional
because it can be nil:
var error: NSError?
You also want to account for there being an error in the parsing which will return nil
or the parsing returning an array. To do that, we can use an optional casting with the as?
operator.
That leaves us with the complete code:
var possibleData = NSJSONSerialization.JSONObjectWithData(
responseData,
options:NSJSONReadingOptions.AllowFragments,
error: &error
) as? NSDictionary;
if let actualError = error {
println("An Error Occurred: \(actualError)")
}
else if let data = possibleData {
// do something with the returned data
}