私はこの長い関数をAPI呼び出しの束にして、データを解析し、視察場所の束を表す2つの配列を返します(1つの配列は緯度を1つ緯度を保持する)。私が抱えている問題は、2つの配列がポピュレートされた時点を判断することです。理想的には、私はどこでも私はprint文を置くしかし、私は0の配列数のいずれかを取得する私のコードでSwift - API呼び出しのトラブル/ CompletionHandler/URLSessions
print("ArrayCount = \(self.latArray.count)")
どこかに置いて、ArrayCount = 123を読んコンソールで単一のprint文を受信できるようにしたいと思いますまたは追加されたときに値のループが印刷されます(1..2..3 .. ... .. 123)。前もって感謝します!
func someFunction()
{
let url:URL = URL(string: "...")
let task = URLSession.shared.dataTask(with: URLRequest(url: url))
{
data, response, error in
if error != nil
{
print("ERROR IN API REQUEST: \(error!.localizedDescription)")
}
else
{
do
{
if let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any]
{
if let layerOne = parsedData["one"] as? [String: Any]
{
if let layerTwo = layerOne["two"] as? [[String: Any]]
{
for layerThree in layerTwo
{
if let variableName = layerThree["value"] as? String
{
let innerUrl:URL = URL(string: "...")!
let innerTask = URLSession.shared.dataTask(with: URLRequest(url: innerUrl))
{
data, response, error in
if error != nil
{
print("ERROR IN API REQUEST: \(error!.localizedDescription)")
}
else
{
do
{
if let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any]
{
if let layerA = parsedData["A"] as? [String: Any]
{
if let lat = layerA["Latitude"] as? String, let long = layerA["Longitude"] as? String
{
self.latArray.append(lat)
self.longArray.append(lon)
}
}
}
}
catch
{
print("ERROR IN JSON SERIALIZATION")
}
}
}
innerTask.resume()
}
}
}
}
}
}
catch
{
print("ERROR IN JSON SERIALIZATION")
}
}
}
task.resume()
}
受信しているJSONのサンプルを提供できますか?このJSONを解析する方法は本当に奇妙に見えます。 – AdamPro13
ランダムな任意の名前を使用するために、すべての変数とサブスクリプトを置き換えましたか?これはGoogle Places APIからのAPIレスポンスを解析しようとしているようですが、元のコードを投稿するだけではないのはなぜですか?そうすれば、他の人があなたの問題を助けやすくなります。 –
'if'文ごとに複数の条件付きバインディングを行うことができます。あなたはこの狂った巣をすべて必要としません。 – Alexander