本当に愚かなようであれば
ヘルプは非常に高く評価して申し訳ありませんされるだろう。最初はコアデータの使用量が多いですが、iOS開発を継続する予定がある場合は、時間を投資する価値があります。 Core Data Tuts
あなたのアプリや目的の中で何をやっているのか分かりませんし、目的に応じてCore Dataがちょっと残念ですが、毎回更新されたJSONを保存してファイルを上書きすることができますデバイスのドキュメントのdirで、データを読み込んで再度解析します。
あなたは使用してOutputStreamにJSONデータを書き込むことができます。
JSONSerialization.writeJSONObject(_ obj: Any, to stream: OutputStream, options opt: JSONSerialization.WritingOptions = [], error: NSErrorPointer)
//Write JSON data into a stream. The stream should be opened and configured.
//The return value is the number of bytes written to the stream, or 0 on error.
//All other behavior of this method is the same as the dataWithJSONObject:options:error: method.
UPDATE:[OK]を私は今、あなたの質問を参照してくださいと思いますが。データをView Controllerに戻すには、2通りの方法があります。1.パターンを委譲します。2. Closure。私は個人的に閉会以上の代議員を使用するのが好きです。
あなたはプロトコルを作成する必要があります代表者で
:次に、あなたが必要となります
var dataTaskCompleteDelegate : SessionDataTaskComplete?
:
protocol SessionDataTaskComplete {
func dataDownloaded(parsedJson : [String : Double])
}
そして、あなたのURLSessionクラスの内部で使用すると、そのプロトコルデリゲートを保持するクラス変数が必要になりますビューコントローラにそのプロトコルを実装させる:
class MyViewController: UIViewController, SessionDataTaskComplete {
override func viewDidLoad() {
super.viewDidLoad()
//Also assign your viewController as your URLSession's SessionDataTaskComplete delegate
myURLSession.dataTaskCompleteDelegate = self
}
func dataDownloaded(parsedJson : [String : Double]) {
//Handle data as you wish here
}
}
今すぐあなたのfetchRatesに()あなたが戻ってあなたのViewControllerにデータを渡すためにそのデリゲートを使用することができます。
func fetchRates(){
//Set EndPoint URL
let url = URL(string: endPoint)
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {
print(error as Any)
}
do {
let json = try? JSONSerialization.jsonObject(with: data!, options: [])
let dictonary = json as? [String: Any?]
let ratesJson = dictonary?["rates"] as? [String: Double]
//print(ratesJson as Any)
if (dataTaskCompleteDelegate != nil) {
dataTaskCompleteDelegate!.dataDownloaded(parsedJson: ratesJson)
}
} catch let jsonError {
print(jsonError)
}
}.resume()
}
デリゲートパターンを使用に慣れていない場合、それは私はそれとして、過ごす時間の学習を示唆している何か他のものですiOS SDKで全面的に使用されています。それらを義務/タスクを別のオブジェクトに割り当てるオブジェクトとして考えることを試みてください。
私は代議員を読み上げましたが、何かを理解するのが本当に困っています...上のコードを試してみましたが、それを動作させることができませんでした。ViewDidの内部ではできません。var dataTaskCompleteDelegate:SessionDataTaskComplete?をロードします。これは、私のfetchRates()がViewControllerクラス(外部ViewDidLoadのようなものだけど、私は本当にわくわくしています。 –
それが理由です。通常、セッションタスクとデータモデルの変更に対して別のクラスがあります。あなたのケースでは、それはあなたのビューコントローラ内にあるので、dataTaskCompleteDelegate!.dataDownloaded(parsedJson:ratesJson)を呼び出す代わりに、プロトコルを作成するだけで別の関数を呼び出してデータを渡します。 MVC(Model-View-Controller)のアーキテクチャーを調べて学ぶことを強くお勧めします。 –
私は実際に何のためにthxを助けるために考えていないので、よくこれを延期してMVCを見てみるつもりです –