【问题标题】:Having problems in swift 3 when using Struct and functions使用 Struct 和函数时在 swift 3 中出现问题
【发布时间】:2017-10-06 06:29:14
【问题描述】:

我正在尝试制作一个收款机计算器应用程序,以帮助我更快地从收银机中数钱。例如:我可以输入我有多少张 20 美元的单张钞票,而不是把所有 20 美元的钞票加起来,应用程序就可以计算出总数。这是我的代码,我使用了 Struct 和函数,但运行代码时出错。谢谢

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)

【问题讨论】:

  • 这段代码甚至无法编译;这里有很多错误。告诉我们您需要帮助的具体错误,以及您已经尝试过的问题(如果适用)。
  • 如何从 moneyCalcualate 函数中的“值:Money”变量开始 for 循环?
  • 您需要使用 let 或 var 定义您的属性
  • let oneCent: Double let fiveCent: Double let tenCent: Double let quater: Double let fiftyCent: Double let rollCent: Double let rollFive: Double let rollTen: Double let rollQuater: Double let dollarCoin: Double let dollar: Double let fiveDollar: Double let tenDollar : Double let twentyDollar: Double let fiftyDollar: Double let hundredDollar: Double
  • 你的代码中有两次 oneCent(重新声明)

标签: ios swift function class struct


【解决方案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

【讨论】:

    【解决方案2】:

    你可以这样试试..

    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)
    

    希望对你有帮助!

    【讨论】:

    • 感谢史密斯特工。静态让的目的是什么?这是我第一次看到它。它是否将我们的货币枚举中的所有值都转换为 am 数组?
    • 我正在制作一个包含所有枚举值的数组,以便我们可以遍历它们。 @Perewillz
    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    相关资源
    最近更新 更多