繁体   English   中英

在 swift 4 中可选

[英]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。 请帮我解决。 提前致谢

如果你的HeroesHero实体是这样的

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM