[英]Optional in swift 4
//View Controller
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
final let url = URL(string : "https://simplifiedcoding.net/demos/view-flipper/heroes.php")
var HeroesArray : [Hero] = []
var dict = NSDictionary()
var cellReuseIdentifier = "HeroId"
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
self.tableView.register(HeroClass.self, forCellReuseIdentifier: cellReuseIdentifier)
downloadJson()
}
func downloadJson(){
guard let finalURL = url else { return }
URLSession.shared.dataTask(with: finalURL) { data, urlresponse, error in
guard let data = data, error == nil, urlresponse != nil else{
print("Something Wrong")
return
}
do{
let decoder = JSONDecoder()
let sathish = try decoder.decode(Heroes.self, from:data)
self.HeroesArray = sathish.heroes
DispatchQueue.main.async {
self.tableView.reloadData()
}
}catch{
print(error)
print("Something Went Wrong after Download")
}
}.resume()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return HeroesArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let cell : HeroClass = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! HeroClass!
print(cell)
print(HeroesArray[indexPath.row].name)
cell.HeroName?.text = HeroesArray[indexPath.row].name
print(cell.HeroName?.text)
if let imageURL = URL(string: HeroesArray[indexPath.row].imageurl){
DispatchQueue.global().async {
let data = try? Data(contentsOf: imageURL)
if let data = data {
let image = UIImage(data: data)
DispatchQueue.main.async {
cell.imageLabel?.image = image
//print(image)
}
}
}
}
return cell
}
}
无法获取 cell.HeroName?.text & cell.imageLabel?.image 值。 两个值都指向 nil。 请帮我解决。 提前致谢
如果你的Heroes
和Hero
实体是这样的
struct Hero: Decodable {
let name: String
let imageurl: String
}
struct Heroes: Decodable {
let heroes: [Hero]
}
那么您的以下代码应该可以正常工作
let url = URL(string : "https://simplifiedcoding.net/demos/view-flipper/heroes.php")
var heroes: [Hero] = []
var dict = NSDictionary()
guard let finalURL = url else { return }
URLSession.shared.dataTask(with: finalURL) { data, urlresponse, error in
guard let data = data, error == nil, urlresponse != nil else{
print("Something Wrong")
return
}
do {
let decoder = JSONDecoder()
let sathish = try decoder.decode(Heroes.self, from:data)
self.heroes = sathish.heroes
print(heroes)
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch {
print(error)
print("Something Went Wrong after Download")
}
}.resume()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.