我想首先说我是一个快速的新手(以及一般的编码)。我想从URL(即:运动装置列表)中将一些信息提取到我的应用程序中的一个viewcontroller视图中。我已经查找了引用kanna和JSON的各种线程,但正如我所提到的,我是新手,因此我的理解还有点不合时宜。
任何人都可以提供一些简单的步骤或了解一些我可以阅读的视频/文档来实现这一目标吗?
谢谢,
答案 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或其他地方找到示例。
您还可以使用第三方库(如SwiftyJSON
或AlamoFire
)进行JSON解析(以及下载。)
然而,使用URLSession
和JSONSerialization并不困难,而且在学习如何在Xcode中使用Apple优秀的API文档并学习应用程序框架方面,这是一个很好的练习。