![](/img/trans.png)
[英]Fatal error: 'try!' expression unexpectedly raised an error: Swift.DecodingError.keyNotFound(CodingKeys(stringValue: "hours", intValue: nil)
[英]I got this error in swift storyboard keyNotFound(CodingKeys(stringValue: "topic", intValue: nil), Swift.DecodingError
错误:
keyNotFound(CodingKeys(stringValue: "topic", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: "topic", intValue: nil) ("topic" )", underlyingError: nil))
我的代码:
class ViewController: UIViewController {
@IBOutlet weak var prizeLabel: UILabel!
@IBOutlet weak var priceLabel: UILabel!
@IBOutlet weak var timeLabel: UILabel!
@IBOutlet weak var categoryLabel: UILabel!
@IBOutlet weak var contentLabel: UILabel!
@IBOutlet weak var titleLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// 1
let urlString = "http:..{local-host-address}.../post"
guard let url = URL(string: urlString) else { return }
// 2
URLSession.shared.dataTask(with: url) { (data, response, error) in
if error != nil {
print(error!)
}
guard let data = data else { return }
do {
// 3
//Decode data
let JSONData = try JSONDecoder().decode(JSONTest.self, from: data)
// 4
//Get back to the main queue
DispatchQueue.main.async {
self.timeLabel.text = JSONData.time
self.priceLabel.text = JSONData.price
self.prizeLabel.text = JSONData.prize
self.contentLabel.text = JSONData.content
self.categoryLabel.text = JSONData.category
self.titleLabel.text = JSONData.topic
}
} catch let jsonError {
print(jsonError)
}
// 5
}.resume()
}
}
struct JSONTest: Codable {
var topic: String
var content: String
var category: String
var time: String
var price: String
var prize: String
init(topic: String, content: String, category: String, time: String, price: String, prize: String) {
self.topic = topic
self.content = content
self.category = category
self.time = time
self.price = price
self.prize = prize
}
}
顺便说一句:我还有另一个类似的代码,但错误不同,但首先我想解决这个问题
谢谢!
在我做了一些更改后,这个问题得到了解决:
最终代码:
override func viewDidLoad() {
super.viewDidLoad()
if let url = URL(string: "http://{local-host}/post") {
URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data {
let jsonDecoder = JSONDecoder()
do {
let parsedJSON = try jsonDecoder.decode(parsingss.self, from: data)
print(parsedJSON)
}
catch {
print(error)
}
}
}.resume()
}
}
struct everything: Codable{
let topic: String
let content: String
let category: String
let time: String
let price: String
let prize: String
}
struct parsingss : Codable {
let scrims: [everything]
}
}
数据将显示在终端中。
我不知道如何在 label btw 上显示它..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.