如何解决如何将其分为3种方法.. thisYear,thisMonth和pastYear?
我想创建一个将thisYear,pasYear和thisMonth分开的方法。 如何创建一个分离的方法。谢谢。
func viewWillAppear(view: UIViewController) {
totalRevenueThisCycleWorker.fetchAllRevenueList { (result) in
switch result {
case .success(let listRevenues):
//thisYear
let revenues = listRevenues.filter({ (domain) -> Bool in
return domain.year == Date().year })
var thisYearRevenueList: [Double] = []
for totalThisYear in revenues {
thisYearRevenueList.append(totalThisYear.revenue)
}
let totalRevenuesThisYear = thisYearRevenueList.reduce(0,+)
let doubleRevenuesThisYear = Double(String(format: "%.2f",totalRevenuesThisYear))
print("Total Revenues of Current Year \(doubleRevenuesThisYear ?? 0) ")
//thisMonth
let months: [String] = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
var highestValue = listRevenues.max { x,y in x.month > y.month }
let month = months[highestValue!.month + 1]
print("COUNTED \(month) ")
let monthRevenues = listRevenues.filter({ (domain) -> Bool in
return domain.month == highestValue?.month })
var monthRevenueList: [Double] = []
for totalMonth in monthRevenues {
monthRevenueList.append(Double(totalMonth.revenue))
}
let totalRevenuesMonth = monthRevenueList.reduce(0,+)
let doubleRevenuesMonth = Double(String(format: "%.2f",totalRevenuesMonth))
print("Total Revenues of Latest Month in Current Year \(doubleRevenuesMonth ?? 0) ")
//pastYear
let pastRevenues = listRevenues.filter({ (domain) -> Bool in
return domain.year == Date().year - 1 })
var pastYearRevenueList: [Double] = []
for totalPastYear in pastRevenues {
pastYearRevenueList.append(totalPastYear.revenue)
}
let totalRevenuesPastYear = pastYearRevenueList.reduce(0,+)
print("Total Revenues of Past Year \(totalRevenuesPastYear) ")
let item = TotalRevenueModel(thisYearTotalRevenue: doubleRevenuesThisYear ?? 0,pastYearTotalRevenue: totalRevenuesPastYear,thisMonthTotalRevenue: doubleRevenuesMonth ?? 0,thisYearMonth: month)
output?.showRevenues(amounting: item)
case .failure(_): break
}
}
}
我想创建一个将thisYear,过去的Year和thisMonth分开的方法。 如何创建一个分离的方法。谢谢。
解决方法
您可以创建将代码分解为3种方法thisYear(listRevenues:
,thisMonth(listRevenues)
,pastYear(listRevenues:)
func thisYear(listRevenues: [Revenue]) {
let revenues = listRevenues.filter { $0.year == Date().year }
let thisYearRevenueList = revenues.map{ $0.revenue }
let totalRevenuesThisYear = thisYearRevenueList.reduce(0,+)
let doubleRevenuesThisYear = Double(String(format: "%.2f",totalRevenuesThisYear))
print("Total Revenues of Current Year \(doubleRevenuesThisYear ?? 0) ")
}
func thisMonth(listRevenues: [Revenue]) {
let months: [String] = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
if let highestValue = listRevenues.max({ $0.month > $1.month }) {
let month = months[highestValue.month + 1]
print("COUNTED \(month) ")
let monthRevenues = listRevenues.filter { $0.month == highestValue.month }
let monthRevenueList: [Double] = monthRevenues.map { Double($0.revenue) }
let totalRevenuesMonth = monthRevenueList.reduce(0,+)
let doubleRevenuesMonth = Double(String(format: "%.2f",totalRevenuesMonth))
print("Total Revenues of Latest Month in Current Year \(doubleRevenuesMonth ?? 0) ")
}
}
func pastYear(listRevenues: [Revenue]) {
let pastRevenues = listRevenues.filter { $0.year == Date().year - 1 }
var pastYearRevenueList = pastRevenues.map { $0.revenue }
let totalRevenuesPastYear = pastYearRevenueList.reduce(0,+)
print("Total Revenues of Past Year \(totalRevenuesPastYear) ")
let item = TotalRevenueModel(thisYearTotalRevenue: doubleRevenuesThisYear ?? 0,pastYearTotalRevenue: totalRevenuesPastYear,thisMonthTotalRevenue: doubleRevenuesMonth ?? 0,thisYearMonth: month)
output?.showRevenues(amounting: item)
}
现在调用类似的方法
switch result {
case .success(let listRevenues):
self.thisYear(listRevenues: listRevenues) //thisYear
self.thisMonth(listRevenues: listRevenues) //thisMonth
self.pastYear(listRevenues: listRevenues) //pastYear
case .failure(_): break
}
使用您自己的数据类型修改代码,即将Revenue
替换为listRevenues
类型。
注意:避免不必要地使用强制展开(!
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。