gpt4 book ai didi

ios - 我如何快速访问函数数组?

转载 作者:行者123 更新时间:2023-11-28 11:38:15 24 4
gpt4 key购买 nike

我是 swift 的新手。我在 nib 文件中创建了一个 Collection View ,并且在主视图 Controller 中有一个 subview 。我想在 collectionview 中显示数组,但我不能。首先我做了一天的模型:

struct Days {    
let day: String
let Image: String
let temp: Double
}

然后在 daycell 中:

class DayCell: UICollectionViewCell {
@IBOutlet weak var lblDay: UILabel!
@IBOutlet weak var imgWeather: KBImageView!
@IBOutlet weak var lblTemp: UILabel!
func updateViews(day: Days) {
lblDay.text = day.day
imgWeather.setImageWithKingFisher(url: day.Image)
lblTemp.text = String(day.temp)
}
}

然后在公共(public)课上,我使用 alamofire 获取 json 数据并将其解码并将它们放入我的模型中:

public class Publics {
static let instance = Publics()

func showInfo(code: String, completion: @escaping ([Days]) -> Void) {


let DaysUrl = "http://api.openweathermap.org/data/2.5/forecast?id=\(code)&appid=3e28385cde03f6ee26c83b629ca274cc"
Alamofire.request(DaysUrl, method: .get, parameters: nil, encoding: URLEncoding.httpBody).responseJSON { response in
if let data = response.data {
do {
self.myJson = try JSONDecoder().decode(JsonForecast.Response.self, from: data)

let counter = (self.myJson?.list.count)! - 1

let myDay1 = self.myJson?.list[counter-32]
let myDay2 = self.myJson?.list[counter-24]
let myDay3 = self.myJson?.list[counter-16]

let weekDay1 = self.getDate(date: self.getDayOfWeek((myDay1?.dt_txt)!)!)
let weekDay2 = self.getDate(date: self.getDayOfWeek((myDay2?.dt_txt)!)!)
let weekDay3 = self.getDate(date: self.getDayOfWeek((myDay3?.dt_txt)!)!)

let DaysArray = [
Days(day: weekDay1, Image: (myDay1?.weather[0].icon)!, temp: (myDay1?.main?.temp)!) ,
Days(day: weekDay2, Image: (myDay2?.weather[0].icon)!, temp: (myDay2?.main?.temp)!) ,
Days(day: weekDay3, Image: (myDay3?.weather[0].icon)!, temp: (myDay3?.main?.temp)!)
]
completion(DaysArray)
} catch {
print(error)
}
}
}
}

直到这里我没有问题,但现在我想在 collectionview 中显示 DaysArray 但我不能,我的 collectionview 类如下:

class DayCollection: UIView, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

@IBOutlet var contentView: UIView!
@IBOutlet weak var collectionDay: UICollectionView!
var days = [Days]()


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "DayCell", for: indexPath) as! DayCell

Publics.instance.showInfo(code: "112931") { result in
self.days = result
print(self.days)
DispatchQueue.main.async {
self.collectionDay.reloadData()
}
}
let day = days[indexPath.item]
cell.updateViews(day: day)

return cell

}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return days.count
}

override func awakeFromNib() {
super.awakeFromNib()

self.collectionDay.dataSource = self
self.collectionDay.delegate = self
self.collectionDay.register(UINib(nibName: "DayCell", bundle: nil), forCellWithReuseIdentifier: "DayCell")

}
}

我应该在 mainVC 类中做什么?(也许我应该使用协议(protocol)委托(delegate)还是不使用?)

最佳答案

首先,如果您想在结构中包含常量,请将它们声明为常量private(set) 太可怕了。

struct Days {    
let day: String
let dImage: String
let temp: Double
}

并且永远不会将结构成员声明为隐式展开的可选值,它们在 init 方法中使用非可选值进行初始化。无论如何都不需要结构中的 init 方法。


你必须添加一个完成处理程序

public func showInfo(code: String, completion: @escaping ([Days]) -> Void)  {

...

let daysArray = [
Days(day: weekDay1, Image: (myDay1?.weather[0].icon)!, temp: (myDay1?.main?.temp)!) ,
Days(day: weekDay2, Image: (myDay2?.weather[0].icon)!, temp: (myDay2?.main?.temp)!) ,
Days(day: weekDay3, Image: (myDay3?.weather[0].icon)!, temp: (myDay3?.main?.temp)!)
]
completion(daysArray)
}

然后在 Collection View 的类中添加一个数据源数组

var days = [Days]() 

获取数据

Publics.instance.showInfo(code: "Foo") { result in
self.days = result
DispatchQueue.main.async {
self.collectionDay.reloadData()
}
}

numberOfItemsInSection

中返回 days.count

进一步用力展开细胞

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "DayCell", for: indexPath) as! DayCell

如果代码崩溃,说明您犯了设计错误。使用可选绑定(bind),代码不会崩溃,但您什么也看不到,也不知道为什么

找一天

let day = days[indexPath.item]
cell.updateViews(day)

关于ios - 我如何快速访问函数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54501196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com