【问题标题】:swift功能不起作用,请帮助某人解决?
【发布时间】:2022-01-23 11:20:30
【问题描述】:
func Function(_ currency: Currency, _ amount: Int) -> String {
    func unsignInt( amou: Int) -> String {
            
            return String(-amou)
        }
        
        let curArray = [
            ".rub": " ₽;",
            ".eur": " €;",
            ".usd": " $;"
        ]
        
        var amountRes = ""
        amount < 0  ? (amountRes = "(" + unsignInt(amou: amount) + ")") : (amountRes = String(amount))
        
        for (curCode, prnCode) in curArray{
            if curCode as AnyObject === currency as AnyObject {
                return amountRes + prnCode
            }
        }
        return "0"
    }

此函数接受货币形式的货币和整数金额。 它应该返回一个包含金额和货币符号的字符串。负数必须显示在括号中且不带减号。 但是这个功能不起作用,帮忙解决一下

【问题讨论】:

  • 什么不起作用? Currency 是什么?请添加reproducible example
  • 您能在此处添加您传递的值吗?
  • 为什么将货币字典称为“curArray”?
  • 你的 curArray 不是一个数组,而是一个字典,并且强制转换为 AnyObject 是不好的,并且将两个不同类型的对象强制转换为 AnyObject 以比较它们是否是同一个对象(三元组 =)永远不会返回 true。
  • 你如何设置 amountRes 不仅仅是丑陋的。 === for AnyObject 只会比较您案例中的引用,那么这应该如何工作? “unsignInt”和“amou”只是糟糕的名字。

标签: swift function


【解决方案1】:

你的代码很奇怪。我会写得更像这样:

func amount(_ currency: Currency, _ amount: Int) -> String {
    
    let currancyDict = [
        ".rub": " ₽;",
        ".eur": " €;",
        ".usd": " $;"
    ]
    
    let amountString: String
    if amount < 0 {
      amountString = "(\(abs(amount)))"
    } else {
      amountString = "\(amount)"
    }

    if let abbreviation = currancyDict[currency.string] {
      return amountString + abbreviation
    } else {
      return "0"
    }
}

要实现这一点,您需要在 Currency 类型上实现计算属性 string,该属性返回在 currencyDict 的键中使用的字符串。

我什至会将currencyDict 放入Currency 类型中,并向Currency 类型添加一个方法,该方法接受一个整数并返回字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2011-01-19
    相关资源
    最近更新 更多