Преобразование примера SwiftyJSON в данные URL

Заранее простите невежество; Я спотыкаюсь о Swift и JSON и усердно работаю, пытаясь разобрать учебные пособия и лучше понять их.

Я использовал пример проекта Xcode SwiftyJSON (здесь). Если я изменю данные файла SwiftyJSONTests.json, включив в них нужные мне данные, они правильно отобразятся при запуске проекта. Моя цель — изменить файл AppDelegate.swift, чтобы он извлекал данные из моей активной страницы JSON, а не из примера файла SwiftyJSONTests.json.

Мой файл AppDelegate.swift выглядит так;

import UIKit
import SwiftyJSON

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    let navigationController = self.window?.rootViewController as! UINavigationController
    let viewController = navigationController.topViewController as! ViewController

    if let file = NSBundle(forClass:AppDelegate.self).pathForResource("SwiftyJSONTests", ofType: "json") {
        let data = NSData(contentsOfFile: file)!
        let json = JSON(data:data)
        viewController.json = json
    } else {
        viewController.json = JSON.nullJSON
    }

    return true
    }
}

Я попытался изменить свою строку «let data = «…» на «let data = NSURL (contentsOfURL: url)!» и изменение «SwiftyJSONTests» на мой желаемый URL-адрес, но, похоже, это даже близко не близко.

Есть ли какое-либо руководство, которое можно было бы предоставить, чтобы сохранить структуру моей раскадровки и AppDelegate неповрежденной, но чтобы она указывала на URL-адрес, а не на файл? Мне интересно учиться и разбирать.

Огромное спасибо!


person ZbadhabitZ    schedule 17.04.2015    source источник


Ответы (2)


Для реального приложения следует всегда использовать асинхронный метод загрузки.

Свифт 2

NSURLConnection устарел, мы используем NSURLSession.

if let url = NSURL(string: "http://myurl.com/myfile.json") {
    NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, response, error) in
        if let error = error {
            print("Error: \(error.localizedDescription)")
        } else {
            if let data = data {
                let json = JSON(data: data)
                print(json)
            } else {
                print("no data")
            }
        }
    }).resume()
}

Исходная версия Swift 1

let url = NSURL(string: "http://myurl.com/myfile.json")
let request = NSURLRequest(URL: url!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
    if error == nil {
        let json = JSON(data: data!)
        println(json)
    }
    else {
        println("Error: \(error.localizedDescription)")
    }
})
person Eric Aya    schedule 17.04.2015

Хорошо, небольшой пример в Swift 1.2 Xcode 6.3

class ViewController: UIViewController  {

var data :NSMutableData = NSMutableData()
 URLJson()

}

func URLJson(){

    data = NSMutableData()
    let urlPath: String = "http://www.myUrl........"

    var url: NSURL = NSURL(string: urlPath)!
    var request: NSURLRequest = NSURLRequest(URL: url)
    var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: true)!
    connection.start()

}

func connection(connection: NSURLConnection!, didReceiveData data: NSData!){

    self.data.appendData(data)

}

func connectionDidFinishLoading(connection: NSURLConnection!)

{
    var error: NSErrorPointer=nil

    var jsonResult: NSArray = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: error) as! NSArray

    //print json Result
    println(jsonResult)

    var  title :NSArray =  jsonResult.valueForKey("title") as! NSArray
    var text  :NSArray = jsonResult.valueForKey("introtext")as! NSArray




    println("title \(title)")

}

в моем примере я получаю данные в массиве, но они могут быть у вас в словаре .... удачи

person RobertoL    schedule 17.04.2015
comment
Это было отличным объяснением и предоставило отличный материал для изучения! Большое спасибо @RobertoL! - person ZbadhabitZ; 17.04.2015