ios - 更新用户界面 Swift

标签 ios arrays swift user-interface

大家好,任何人都可以帮助我很难从我的数组更新 ui 这是我的代码

fileprivate func fetchPrayer() {
        guard let city = self.city else { return}
        let url = "http://muslimsalat.com/\(city).json?key=6b67ed8d12d1f63fa200427bc794eff1"

        DispatchQueue.global(qos: .background).async {
            Alamofire.request(url, method: .get).responseJSON(completionHandler: { (dataResponse) in
                if let err = dataResponse.error {
                    print("Failed to fetch data:", err)
                    return
                }
                guard let data = dataResponse.data else { return }

                do {
                    let prayerData = try JSONDecoder().decode(PrayerModel.self, from: data)

                    prayerData.items.forEach({ (item) in
                        let shubuh = Prayer(prayerName: "Shubuh", prayerIcon: #imageLiteral(resourceName: "PartlyCloudyNight"), prayerTime: item.fajr)
                        let dzuhur = Prayer(prayerName: "Dzuhur", prayerIcon: #imageLiteral(resourceName: "Sunny"), prayerTime: item.dhuhr)
                        let ashar = Prayer(prayerName: "Ashar", prayerIcon: #imageLiteral(resourceName: "PartlyCloudyDay"), prayerTime: item.asr)
                        let maghrib = Prayer(prayerName: "Maghrib", prayerIcon: #imageLiteral(resourceName: "Overcast"), prayerTime: item.maghrib)
                        let isya = Prayer(prayerName: "Isya", prayerIcon: #imageLiteral(resourceName: "Clear"), prayerTime: item.isha)
                        self.prayers.append(contentsOf: [shubuh, dzuhur, ashar, maghrib, isya])
                    })
                    self.updateUI()
                    self.tableView.reloadData()

                } catch let decodeErr {
                    print("Failed to decode:", decodeErr)
                }
            })
        }
    }

@objc func scheduleTime() {
    timer = Timer(fireAt: Calendar.current.nextDate(after: Date(), matching: DateComponents(hour: 0..<23 ~= Date().hour ? 23 : 0), matchingPolicy: .nextTime)!, interval: 0, target: self, selector: #selector(updateUI), userInfo: nil, repeats: false)

    RunLoop.main.add(timer, forMode: .common)
}

@objc func updateUI() {
    locationLabel.text = city ?? "Current Location"

    if 4..<9 ~= Date().hour {
        coverImageView.image = #imageLiteral(resourceName: "saffu")
    } else if 14..<16 ~= Date().hour {
        guard let ashar = prayers.first(where: {$0.prayerName == "Ashar"}) else { return }
        prayerLabel.text = ashar.prayerName
        coverImageView.image = #imageLiteral(resourceName: "rezky")
    } else if 17..<18 ~= Date().hour {
        coverImageView.image = #imageLiteral(resourceName: "izuddin")
    } else if 18..<19 ~= Date().hour {
        coverImageView.image = #imageLiteral(resourceName: "nouman")
    } else if 0..<3 ~= Date().hour {
        coverImageView.image = #imageLiteral(resourceName: "ancient")
    }

    scheduleTime()
}

我只成功更新了 prayerLabel.text 的 ui,但是当我想检索 prayerTime 时,我被困在那里,因为当每个 json 数据每天都会更新时,我该如何更新 ui .而且我不知道要检索包含我这样存储的数据的特定对象。

let shubuh = Prayer(prayerName: "Shubuh", prayerIcon: #imageLiteral(resourceName: "PartlyCloudyNight"), prayerTime: item.fajr)
let dzuhur = Prayer(prayerName: "Dzuhur", prayerIcon: #imageLiteral(resourceName: "Sunny"), prayerTime: item.dhuhr)
let ashar = Prayer(prayerName: "Ashar", prayerIcon: #imageLiteral(resourceName: "PartlyCloudyDay"), prayerTime: item.asr)
let maghrib = Prayer(prayerName: "Maghrib", prayerIcon: #imageLiteral(resourceName: "Overcast"), prayerTime: item.maghrib)
let isya = Prayer(prayerName: "Isya", prayerIcon: #imageLiteral(resourceName: "Clear"), prayerTime: item.isha)

感谢您的关注

My UI

最佳答案

我认为你在后台线程中,你不能在后台线程上更新 UI。试试下面这个,它可能会解决你的问题。

DispatchQueue.main.async {

                self.updateUI()
                self.tableView.reloadData()
                        }

关于ios - 更新用户界面 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53277706/

相关文章:

ios - iOS8 在搜索栏中输入文本时出现错误

ios - 将本地 PDF 文件加载到 WebView

c - C 中带有指针的可变大小数组/类似数组?

java - java中int数组到Integer数组列表的转换

ios - 将变量放入 UIAlertView - Swift

ios - 删除 UIPopoverPresentationController 的左右边距?

c# - 当 Canvas Render Mode 设置为 World Space 时没有事件

ios - Xcode 持续集成 : Configured destination not found

arrays - 从字符串数组中添加两个数字的正确 bash 语法是什么?

ios - 循环期间更新进度条