如何将URL中的信息提取到我的swift应用程序中

时间:2017-04-15 13:39:55

标签: ios json swift url screen-scraping

我想首先说我是一个快速的新手(以及一般的编码)。我想从URL(即:运动装置列表)中将一些信息提取到我的应用程序中的一个viewcontroller视图中。我已经查找了引用kanna和JSON的各种线程,但正如我所提到的,我是新手,因此我的理解还有点不合时宜。

任何人都可以提供一些简单的步骤或了解一些我可以阅读的视频/文档来实现这一目标吗?

谢谢,

2 个答案:

答案 0 :(得分:1)

我将使用Alamofire来获得这个答案,这是一个非常好的框架,可以在Swift中与Web API进行交互时查看

您首先需要创建一个自定义模型,您可以使用该模型将JSON数据映射到收到它时,我将称之为Fixture。我不知道您正在使用哪种API或您的模型需要包含哪些API,所以我只会做一些事情

struct Fixture {
    var id: Int?
    var name: String?

    init(from dict: Dictionary<String, AnyObject>) {
        // We'll this out later
    }
}

然后,您需要使用Alamofire创建一个函数来调用API并获得响应。这是一个非常简单的函数,没有任何参数或标题。

Alamofire.request(/*endpoint url*/, method: .get, parameters: nil, encoding: JSONEncoding.prettyPrinted, headers: nil).responseJSON { response in
     if response.response?.statusCode == 200 {
        if let JSON = response.result.value {
           if let response = JSON as? Dictionary<String, AnyObject> {
              // This is where to take the values out of the JSON and cast them as Swift types. 
              //For this example I will imagine that one fixture is returned in a dictionary called "fixture"
              if let dict = response["fixture"] as? Dictionary<String, AnyObject> {
                  let fixture = Fixture(from: dict)
              }
           }
        } 
     }
  }

所以这是一个非常简单的例子。根据API响应的确切结构,它看起来会有所不同。如果您使用您将调用的端点更新您的问题,我可以通过更多帮助更新此答案。

对于init模型中的Fixture方法,我们现在可以将其更新为:

init(from dict: Dictionary<String, AnyObject>) {
    id = dict["id"] as? Int
    name = dict["name"] as? String
    // Again these will need to be changed to accomodate the exact response
}

答案 1 :(得分:1)

您的问题有多个部分。

您需要从远程服务器获取数据,然后需要解析它。对于第一部分,下载,您可以使用NSURLSession(在Swift 3中重命名为URLSession

我在Github上有一个名为Async_demo的示例项目,演示使用URLSession下载数据。

对于解析JSON,您可以使用JSONSerialization,这使得将JSON数据转换为Swift对象变得非常简单。您应该能够在Swift JSONSerialization上搜索,以便在SO或其他地方找到示例。

您还可以使用第三方库(如SwiftyJSONAlamoFire)进行JSON解析(以及下载。)

然而,使用URLSession和JSONSerialization并不困难,而且在学习如何在Xcode中使用Apple优秀的API文档并学习应用程序框架方面,这是一个很好的练习。