Swift 3とXcode8でGETリクエストを作成しようとしましたが、GETリクエストからMain.Storyboardに戻ってきたデータが出力されませんでした。私が得るのは、返されたすべてのJSONがXcode8のコンソールにあることだけです。Swift 3 GETリクエストで返された値を表示できません
JSONのスニペットがXcode8で私の要求と共に返されます。私は "@encoding"と "@version"にアクセスすることができますが、他のすべてにアクセスすることはできず、理由を把握することができません。これがウェブベースの設定だった場合は、変数を宣言してsomeObject.petfinder [1] .sheltersなどと等しく設定することができます。
これは私の要求しているコードです。入力フィールドを作成してURLを構築し、NSDictionaryを使用してそれを返します。
私はコンソールに戻って取得エラーは、次のとおりです。
「致命的なエラー:予期せたオプションの値をアンラップしながら、ゼロ 2017年6月20日12:15:49.392688 PetFinder [47445:9486946]致命的なエラー:予期せずに任意の値を「アンラップしながら、nilを見つけ
// SEND HTTP GET REQUEST
// DEFINE SERVER SIDE SCRIPT URL
let scriptUrl = "https://api.petfinder.com/"
let methodType = "shelter.find"
let apiKey = "?key=0000000000000000000000000"
let urlWithParams = scriptUrl + methodType + apiKey + "&location=\(shelterZip)&format=json"
// CREATE NSURL Object
let myUrl = NSURL(string: urlWithParams)
// CREATE URL REQUEST
let request = NSMutableURLRequest(url:myUrl! as URL);
// REQUEST METHOD - GET/POST
request.httpMethod = "GET"
// RUN HTTP REQUEST
let task = URLSession.shared.dataTask(with: request as URLRequest) {
data, response, error in
if error != nil {
print("error \(error!)")
return
}
// PRINT OUT RESPONSE STRING
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("responseString = \(String(describing: responseString))")
// CONVERT RECEIVED JSON TO NSDictionary
do {
if let convertedJsonIntoDict = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary {
// Print out dictionary
print(convertedJsonIntoDict)
// Get value by key
let shelterName = convertedJsonIntoDict["shelters"] as? [String: Any]
for(key, pair) in convertedJsonIntoDict {
print("-->\(key) \(pair)")
}
print(shelterName!)
}
} catch let error as NSError {
print(error.localizedDescription)
}
}
task.resume()
}
//のTOP
{
"@encoding" = "iso-8859-1";
"@version" = "1.0";
petfinder = {
"@xmlns:xsi" = "http://www.w3.org/2001/XMLSchema-instance";
"@xsi:noNamespaceSchemaLocation" = "http://api.petfinder.com/schemas/0.9/petfinder.xsd";
header = {
status = {
code = {
"$t" = 100;
};
message = {
};
};
timestamp = {
"$t" = "2017-06-20T16:15:49Z";
};
version = {
"$t" = "0.1";
};
};
lastOffset = {
"$t" = 25;
};
shelters = {
shelter = (
{
address1 = {
};
address2 = {
};
city = {
"$t" = Nebraska;
};
country = {
"$t" = US;
};
email = {
"$t" = "[email protected]";
};
fax = {
};
id = {
"$t" = NE117;
};
latitude = {
"$t" = "13.004";
};
longitude = {
"$t" = "-31.449";
};
name = {
"$t" = WOOF COMPANY;
};
phone = {
};
state = {
"$t" = NE;
};
zip = {
"$t" = 68001;
};
},
を探している値JSONをお読みくださいれます。 'シェルター'は、ルートオブジェクトではなく、キー 'petfinder'の辞書のキーです。したがって、 'shelterName'は' nil'であり、クラッシュを引き起こします。スニペットはJSONではなく、Swiftコレクションタイプの文字列表現です。 – vadian
私はそれが鍵であることを知っています、私はそれが鍵/対の価値にアクセスすることができません。私はconvertedJsonIntoDict [keyPath: "petfinder.shelters.shelter"]を試みましたが、それはどちらもうまくいきません。 Xcode8で私が見ていることを明確にしてくれてありがとう。 – VanCoon
私はself.shelterResult.stringValue = convertedJsonIntoDict ["シェルター"]を返しました "タイプ 'NSDictionary'のタイプの値に 'String'タイプのインデックスを添字できません – VanCoon