2017-10-06 73 views
-2

我试图制作一个收银员计算器应用程序,该应用程序可以帮助我更快地从寄存器中进行计数。例如:不是将所有20美元的票据加起来,我只需输入20美元的单曲数,我可以计算出总数。这是我的代码,我使用了一个Struct和一个函数,但是运行代码时出错。由于在使用Struct和函数时在swift 3中遇到问题

struct Money { 
    oneCent: Double 
    fiveCent: Double 
    tenCent: Double 
    quater: Double 
    fiftyCent: Double 
    rollCent: Double 
    rollFive: Double 
    rollTen: Double 
    rollQuater: Double 
    dollarCoin: Double 
    dollar: Double 
    fiveDollar: Double 
    tenDollar : Double 
    twentyDollar: Double 
    fiftyDollar: Double 
    hundredDollar: Double 
    oneCent: Double 
} 

func moneyCalcualate (value at : Money, copies: Double){ 

    var total : Double = 0.00 
    for i in at{ 
     switch i { 
      case oneCent : total = 0.01 * copies 
      case fiveCent : total = 0.05 * copies 
      case tenCent : total = 0.10 * copies 
      case quater : total = 0.25 * copies 
      case fiftyCent : total = 0.50 * copies 
      case rollCent: total = 0.01 * copies 
      case rollFive: total = 0.01 * copies 
      case rollTen : total = 0.01 * copies 
      case rollQuater : total = 10.00 * copies 
      case dollarCoin : total = 1.00 * copies 
      case dollar : total = 1.00 * copies 
      case fiveDollar : total = 5.00 * copies 
      case tenDollar : total = 10.00 * copies 
      case twentyDollar : total = 20.00 * copies 
      case fiftyDollar : total = 50.00 * copies 
      case hundredDollar : total = 100.00 * copies 

     } 
    } 
    return total 
} 


moneyCalcualate(value: quater, copies: 2.0) 
+0

此代码甚至不进行编译;这里有很多错误。告诉我们哪个错误,具体来说,你需要帮助,如果适用,你已经尝试了什么。 –

+0

如何从moneyCalcualate函数中的'value at:Money'变量开始for循环? –

+0

你需要使用出租或VAR –

回答

0

,您可以尝试这种方式..

enum Money { 
case oneCent 
case fiveCent 
case tenCent 
case quater 
case fiftyCent 
case rollCent 
case rollFive 
case rollTen 
case rollQuater 
case dollarCoin 
case dollar 
case fiveDollar 
case tenDollar 
case twentyDollar 
case fiftyDollar 
case hundredDollar 



static let all : [Money] = [.oneCent , .fiveCent , .tenCent , .quater, .fiftyCent, .rollCent, .rollFive, .rollTen, .rollQuater, .dollarCoin, .dollar, .fiveDollar, .tenDollar, .twentyDollar, .fiftyDollar, .hundredDollar] 
} 

func moneyCalcualate (value at : Money, copies: Double) -> Double{ 


var total : Double = 0.00 


switch at { 
case .oneCent : total = 0.01 * copies 
case .fiveCent : total = 0.05 * copies 
case .tenCent : total = 0.10 * copies 
case .quater : total = 0.25 * copies 
case .fiftyCent : total = 0.50 * copies 
case .rollCent: total = 0.01 * copies 
case .rollFive: total = 0.01 * copies 
case .rollTen : total = 0.01 * copies 
case .rollQuater : total = 10.00 * copies 
case .dollarCoin : total = 1.00 * copies 
case .dollar : total = 1.00 * copies 
case .fiveDollar : total = 5.00 * copies 
case .tenDollar : total = 10.00 * copies 
case .twentyDollar : total = 20.00 * copies 
case .fiftyDollar : total = 50.00 * copies 
case .hundredDollar : total = 100.00 * copies 

} 

return total 
} 


moneyCalcualate(value: .quater, copies: 2.0) 

希望它可以帮助!

+0

感谢特工史密斯。静态的目的是什么?这是我第一次看到它。它是否将我们的金钱枚举中的所有值变成了数组? – Perewillz

+0

我正在制作所有枚举值的数组,以便我们可以遍历它们。 @Perewillz –

1

这是enum的典型案例。将所有货币类型声明为个案,并为每个货币分配原始值。然后,您可以创建一个函数,它将返回当前类型的给定份数的总数。

下面是一个例子:

enum Money: Double { 
    case oneCent = 0.01 
    case fiveCent = 0.05 
    case tenCent = 0.1 
    case quarter = 0.25 

    func total(numberOfCopies: Int) -> Double { 
     return self.rawValue * Double(numberOfCopies) 
    } 
} 

你这样称呼它:

let moneyInFiveCents = Money.fiveCent 
let fiveCents = moneyInFiveCents.total(numberOfCopies: 5) 
print(fiveCents) 
// prints 0.25 

let moneyInQuarters = Money.quarter 
let quarters = moneyInQuarters.total(numberOfCopies: 5) 
print(quarters) 
// prints 1.25 

print(fiveCents + quarters) 
// prints 1.5