func downloadJSON(completed: @escaping () -> ()) {
let url = URL(string: "my_URL_FILE")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error == nil {
do {
self.notifications = try JSONDecoder().decode([NotificationStats].self, from: data!)
print(self.notifications)
DispatchQueue.main.async {
completed()
}
}catch {
print("JSON Error")
}
}
}.resume()
}
如果JSON id为空,则进入陷阱,我需要在结构中显示一些内容:
struct NotificationStats:Decodable {
let Tipo: String
let Destinatario: String
let MittenteNome: String
let MittenteCognome: String
let DataOra: String
let FotoBici: String
let CoordinataX: String
let CoordinataY: String
let Stato: String
let IdNotifica: String
let IdMittente: String
let IdDestinatario: String
let IdBici: String
let FotoMittente: String
}
我通过此调用导入我的结构:
var notifications = [NotificationStats]()
然后,我需要在表格视图中创建一个单元格,例如“无通知”。
我可以在结构中输入默认值吗?
这是我创建表视图的代码
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
print(notifications.count)
return notifications.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customCell") as! NotificheCustomTableViewCell
let imgURL = NSURL(string: "my_url/\(notifications[indexPath.row].FotoBici)")
if imgURL != nil{
let data = NSData(contentsOf: (imgURL as URL?)!)
cell.bikeImage?.image = UIImage(data: data! as Data)
}
cell.tipoLabel?.text = "\(notifications[indexPath.row].Tipo.capitalized)"
cell.dataOraLabel?.text = "\(notifications[indexPath.row].DataOra)"
let image = UIImage(named: "arrow-full.png")?.renderResizedImage(newWidth: 30)
let imageViewNew = UIImageView(image: image)
let imageSeen = UIImage(named: "arrow-empty.png")?.renderResizedImage(newWidth: 30)
let imageViewSeen = UIImageView(image: imageSeen)
if (notifications[indexPath.row].Stato == "nuova"){
cell.accessoryView = imageViewNew
}else{
cell.accessoryView = imageViewSeen
}
cell.cellView.layer.cornerRadius = 10
return cell
}
我想了解如何处理当前打印“ jsonerror”的catch的事实。 我想创建一个显示文本规则的单元格,以防该过程输入catch“没有通知您”。
答案 0 :(得分:0)
喜欢:
func tableView(tableView: UITableView, footerForHeaderInSection section: Int) -> CGFloat {
if notifications.count > 0 {
return 0
} else {
return hightOfView
}
}
func tableView(tableView: UITableView, viewForfooterInSection section: Int) -> UIView?{
MakeViewForDisplayNoNotification()
}
答案 1 :(得分:0)
您可以使用扩展名在tableView中显示默认视图。
extension UITableView {
func setEmptyMessage(_ message: String, backgroundColor: UIColor, textColor: UIColor) {
let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.bounds.size.height))
messageLabel.text = message
messageLabel.textColor = textColor
messageLabel.numberOfLines = 0
messageLabel.textAlignment = .center
messageLabel.font = UIFont(name: "TrebuchetMS", size: 15)
messageLabel.sizeToFit()
self.backgroundView = messageLabel
self.backgroundView?.backgroundColor = backgroundColor
self.separatorStyle = .none
}
func restore() {
self.backgroundView = nil
self.separatorStyle = .singleLine
}
}
将以下内容添加到您的numberOfRowsInSection方法中。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if notifications.count == 0 {
self.yourTableView.setEmptyMessage("There is no notifications to display.", backgroundColor: UIColor.clear, textColor: UIColor.lightGray)
} else {
self.yourTableView.restore()
}
return notifications.count
}