var data: NSDictionary =
NSJSONSerialization.JSONObjectWithData(responseData, options:NSJSONReadingOptions.AllowFragments, error: error) as NSDictionary;
このコード行は私にエラーを与えます
NSError is not convertable to NSErrorPointer.
そこで、コードを次のように変更することを考えました。
var data: NSDictionary =
NSJSONSerialization.JSONObjectWithData(responseData, options:NSJSONReadingOptions.AllowFragments, error: &error) as NSDictionary;
nSErrorエラーをNSErrorPointerに変換します。しかし、その後、私は新しいエラーを取得し、それを理解することはできません:
NSError! is not a subtype of '@|value ST4'
これらのタイプとメソッドは、Swift 1。
NS
プレフィックスは削除されますこれにより、次のコードが生成されます。
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)")
}
特定の解析エラーを気にしない場合:
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")
}
元の回答
NSErrorは、nilになる可能性があるため、Optional
として定義する必要があります。
var error: NSError?
また、解析中にnil
を返すエラー、または配列を返す解析中にエラーが発生したことを説明する必要があります。そのためには、as?
演算子を使用したオプションのキャストを使用できます。
完全なコードが残ります。
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
}
前述したように、エラーはオプションとして定義する必要があります( https://developer.Apple.com/library/prerelease/ios/documentation/Swift/conceptual/buildingcocoaapps/AdoptingCocoaDesignPatterns.html )
ただし、エラーが発生してnilが返された場合、このコードはクラッシュします。「As NSDictionary」が原因です。
var data: NSDictionary =
NSJSONSerialization.JSONObjectWithData(responseData, options:NSJSONReadingOptions.AllowFragments, error: &error) as NSDictionary;
次のようにJSON解析を行う必要があります。
var jsonError : NSError?
let jsonResult : AnyObject? = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &jsonError)
if let error = jsonError{
println("error occurred: \(error.localizedDescription)")
}
else if let jsonDict = jsonResult as? NSDictionary{
println("json is dictionary \(jsonDict)")
}
else if let jsonArray = jsonResult as? NSArray{
println("json is an array: \(jsonArray)")
}
それは動作します。また、jsonが配列として返されることもあります。オプションにnilを渡す代わりに、次のように好きなものを渡すことができます。
NSJSONReadingOptions.AllowFragments
もし良かったら。
現在ベータ3
var error: AutoreleasingUnsafePointer<NSError?> = nil
var data: NSDictionary = NSJSONSerialization.JSONObjectWithData( w, options:.AllowFragments, error: error ) as NSDictionary;
以下のコードで確認:
var error: AutoreleasingUnsafePointer<NSErrorPointer?>=nil
var dataVal: NSData = NSURLConnection.sendSynchronousRequest(request1, returningResponse: response, error:nil)
var err: NSError?
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataVal, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
println("Result\(jsonResult)")
使用してみてください
var error: AutoreleasingUnsafePointer<NSErrorPointer?>=nil