Swift 中缺少参数错误的参数
Posted
技术标签:
【中文标题】Swift 中缺少参数错误的参数【英文标题】:Missing argument for parameter error in Swift 【发布时间】: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
【问题讨论】:
【参考方案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() 吗? @jebmarcusenum
s 具有默认值(也称为“原始值”)始终有一个 init
,它采用一个名为 rawValue
的参数。你做了这样一个enum
,因为你在它的声明中使用了: Int
。这就是编译器为您插入init(rawValue:Int)
的原因。当你尝试不带原始值构造card()
时,编译器找不到对应的init
,并报错。
所以我应该创建一个新的初始化,当没有找到原始值时默认为一个值?能解决吗
还有为什么下划线会修复它?
@jebmarcus 修复它的不是下划线,而是调用中func
前面的static
和card
之后没有括号。我添加了一个下划线,以便您的通话可以保持不变。如果没有下划线,您需要使用参数名称调用:card.compareValue(card.Ace, val2:card.King)
。以上是关于Swift 中缺少参数错误的参数的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 3 时出现错误“缺少必需的参数:grant_type”
在 CGRectIntersectsRect 中的调用错误中缺少参数 #2
Swift 中的 PFUser logInWithUsernameInBackground - 参数“目标”调用缺少参数