【问题标题】:Missing argument for parameter error in SwiftSwift 中缺少参数错误的参数
【发布时间】:2016-06-15 18:38:45
【问题描述】:

我正在探索 Swift 并尝试编写一个函数,通过比较它们的原始值来比较两个 Rank 值。但我得到了错误:在调用 card().compareValue(card.Ace, card.King) 中缺少参数“rawValue”的参数

有什么想法吗?

enum card : Int {
    case Ace = 1
    case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
    case King, Queen, Jack

    func cardValue() -> String {
        switch self {
        case .Ace:
            return "Ace"

        case .King:
            return "King"

        case .Queen:
            return "Queen"

        case .Jack:
            return "Jack"

        default:
            return String(self.rawValue)
        }
    }

    func compareValue(val1: card, val2: card) -> String {
        if val1.rawValue > val2.rawValue {
            return "\(val1) is greater than \(val2)"
        } else {
            return "\(val1) is not greater than \(val2)"
        }
    }
}

card().compareValue(card.Ace, card.King) // error

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    问题在于card()对象的构造,调用的目标:

    card(). // and so on
    

    您正在尝试构造 enum 而不指定其原始值。您可以通过提供它来修复它,像这样

    card(rawValue:0). // <<=== This is not a good fix!
    

    但这不是一个好的解决方法。相反,您应该将 compareValue 设为 static 或独立函数:

    static func compareValue(val1: card, _ val2: card) -> String
    //                                   ^
    ... // Note the underscore ----------+
    card.compareValue(card.Ace, card.King) // Works
    

    【讨论】:

    • 我是这门语言的新手,但是因为我没有 init() 吗?
    • @jebmarcus enums 具有默认值(也称为“原始值”)始终有一个 init,它采用一个名为 rawValue 的参数。你做了这样一个enum,因为你在它的声明中使用了: Int。这就是编译器为您插入init(rawValue:Int) 的原因。当你尝试不带原始值构造card()时,编译器找不到对应的init,并报错。
    • 所以我应该创建一个新的初始化,当没有找到原始值时默认为一个值?能解决吗
    • 还有为什么下划线会修复它?
    • @jebmarcus 修复它的不是下划线,而是调用中func 前面的staticcard 之后没有括号。我添加了一个下划线,以便您的通话可以保持不变。如果没有下划线,您需要使用参数名称调用:card.compareValue(card.Ace, val2:card.King)
    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    相关资源
    最近更新 更多