微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将其分为3种方法.. thisYear,thisMonth和pastYear?

如何解决如何将其分为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 举报,一经查实,本站将立刻删除。