这次实作的功能是使用Google Book api
使用textfield输入ISBN码按下Button,自动填入书名、书本简介、书本作者、书本图片
从URLSession开始的内容都会建立这个CheckButton内
@IBOutlet weak var Booktitle: UITextField!
@IBOutlet weak var Bookdescription: UITextView!
@IBOutlet weak var BookISBN: UITextField!
@IBOutlet weak var Bookauthors:UITextField!
@IBOutlet weak var Bookimage:ImageView!
URLSession.shared.dataTask(with: url){(data,response,error) in
if let data = data, let content = String(data:data, encoding: .utf8){
// 先列印出内容,检查是否正确下载json档案
print(content)
}
根据上面解析出来的json资料配置Decoder的资料结构
因为我要显示的是书名,书本描述,所以我找的是title
跟description
struct BookInfo:Codable{
// 因为所需要的东西在Nested Array内
let items:[BookNeed]
}
struct BookNeed:Codable{
let volumeInfo:[Content]
}
struct Content:Codable{
let title:String
let authors:[String]
let description:String
let imageLinks:[imagelinks]
}
struct imagelinks:Codable{
let thumbnail:URL
}
// 使用Google Book的web api来查询所要的资料
let url = URL(string:"https://www.googleapis.com/books/v1/volumes?q=isbn:\(String(BookISBN.text!))")!
// 将JSONDecoder建立在刚刚的URLSession下面
URLSession.shared.dataTask(with: url){(data,response,error) in
// 建立JSONDecoder实例
let decoder = JSONDecoder()
if let data = data{
do{
// 让decoder来解析data,让解析完成的资料储存在BookInfo的资料结构内
let Response = try decoder.decode(BookInfo.self, from:data)
// 让textfield内的文字显示在textfield上
self.Booktitle.text = Response.items.first?.volumeInfo.title
self.Bookdescription.text = Response.items.first?.volumeInfo.description
self.Bookauthors.text = Response.items.first?.volumeInfo.authors.first
let imageurl = Response.items.first?.volumeInfo.imageLinks.thumbnail
let imageData = try Data(contentOf:imageurl!)
self.Bookimage.image = UIImage(data:imageData)
}catch{
print("error")
}
}
}.resume()
/
参考资料
利用 JSONDecoder 和 Codable 解析 JSON 和生成自订型别资料
Day 03: 试着解析 JSON 的档案吧! - iT 邦帮忙::一起帮忙解决难题,拯救 IT 人的一天
>>: 【D7】试用厨具:历史资料(Historical Market Data)
前言 本文说明持仓部位(库存)(positions)资讯。 程序实作 程序 positions =a...
848. Shifting Letters https://leetcode.com/problem...
人的科技文明发展始终来自於人性 在疫情後的时代,所有的一切都将发生改变,这已经是一个不能逆转的趋势了...
前言 跟变数一样 JavaScript 在 ES6 为函式新添加一种写法,他和传统函式有以下差异: ...
今天我们要介绍的是python的类别,所谓的类别就是指将方法变数或物件建成一个群组,里面会有需要用到...