上一篇在 TwMarketTradingInfoManager 完成了拿取大盘成交量的 API,接下来,在原来的大盘 K 线页的 Model,加上拿取大盘成交量功能的 API。命名为 func requestTwVolumeInfo()
。
var twExStockDataSet = [StockKLine]()
var twExVolumeDataSet = [TwMarketTradingInfo]() //
// MARK: - 给外部呼叫的 func
/// 会取这个月和前一个月台股加权指的 KLine data,单一个月,有可能 k 棒数量太少
func requestTwExKLineAndVolumeInfo() {
requestTwExKLineInfo()
requestTwVolumeInfo()
}
// MARK: - 拿大盘量
private func requestTwVolumeInfo() {
requestTwThisMonthVolumeInfo()
requestTwLastMonthVolumeInfo()
}
private func requestTwThisMonthVolumeInfo() {
let date = dateUtility.getStartOfMonth()
volumeManager.requestTwMarketDailyTradingInfo(date: date) { [weak self] volumeList, error in
self?.update(volumeList: volumeList)
self?.delegate?.didRecieveVolume(volumeDataSet: volumeList, error: error)
}
}
private func requestTwLastMonthVolumeInfo() {
let date = dateUtility.getLastMonthStartDate()
volumeManager.requestTwMarketDailyTradingInfo(date: date) { [weak self] volumeList, error in
self?.update(volumeList: volumeList)
self?.delegate?.didRecieveVolume(volumeDataSet: volumeList, error: error)
}
}
private func requestTwBefore2MonthVolumeInfo() {
let date = dateUtility.getMonthStartDate(date: Date(), add: -2)
volumeManager.requestTwMarketDailyTradingInfo(date: date) { [weak self] volumeList, error in
self?.update(volumeList: volumeList)
self?.delegate?.didRecieveVolume(volumeDataSet: volumeList, error: error)
}
}
private func update(volumeList: [TwMarketTradingInfo]) {
let updatedData = Set(self.twExVolumeDataSet + volumeList)
self.twExVolumeDataSet = Array(updatedData).sorted { $0.date.timeIntervalSince1970 < $1.date.timeIntervalSince1970 }
}
完成後,加上 delegate func 告诉 VC 有值的变化
protocol TwStockMarketKLineModelDelegate: AnyObject {
func didRecieveTaiEx(kLineDataSet: [StockKLine], error: Error?)
func didRecieveVolume(volumeDataSet: [TwMarketTradingInfo], error: Error?)
}
TwStockMarketKLineViewController 要补上新加的 delegate func
extension TwStockMarketKLineViewController: TwStockMarketKLineModelDelegate {
func didRecieveVolume(volumeDataSet: [TwMarketTradingInfo], error: Error?) {
print(model.twExVolumeDataSet)
}
func didRecieveTaiEx(kLineDataSet: [StockKLine], error: Error?) {
print(model.twExStockDataSet)
}
}
KLineViewController 也要加上 volumnDataSet 让外部传入。
var volumnDataSet = [TwMarketTradingInfo]()
然後在把 KLineVC 推进来的时候,要一起把加权指数的值传下去。
@IBAction func pushKLineButtonDidTap(_ sender: Any) {
let storyboard = UIStoryboard(name: "KLine", bundle: nil)
if let vc = storyboard.instantiateViewController(withIdentifier: "KLineViewController") as? KLineViewController {
vc.kLineDataSet = model.twExStockDataSet
vc.volumnDataSet = model.twExVolumeDataSet //前几篇没有这个值
navigationController?.pushViewController(vc, animated: true)
}
}
然後,就可以准备在 KLineViewController 中画上量的图了。
>>: [Day30] 终於来到了这一天 ~ 第二次铁人赛完赛心得 && 梳理学习顺序
属性列举与原型的关系 自订原型 与 原生原型 最大的不同是在可列举(enumerable)的部分 原...
物件(object) 参考此篇:Day12 - 物件 建立空的物件,有2种方法 使用 new Obj...
今天要讲解的是模组化的重要性,我在上学期修一门网页程序设计, 在学期末需要作出实体网页时,所有的程序...
今天看了彭彭老师的影片,他使用了程序码做举例,这篇我会使用他举例的程序,再另外加上自己笔记让印象加深...
Abstract 小编先前每个范例都有提供服务(Service)层级的测试案例,但部分开发者会开发许...