使用基于元组的值将基于变量的元组直接传递给枚举会导致编译错误.例如:
我有一个枚举如下:
enum AnswerType {
case Objective(Int)
case Subjective(question: Int, answer: String)
}
var stAnswer = (question: 1, answer: "Student's Answer")
let answerType = AnswerType.Subjective(stAnswer) //Compilation error here - "Missing argument for parameter answer in call"
Run Code Online (Sandbox Code Playgroud)
这给Swift 2.1带来了编译错误.但是当我改变stAnswer为常量时,让它工作正常.任何有想法的人在这里导致编译器错误?
Swift 无法处理这种方式的传递var。它只能传递一个常量元组来初始化关联数据。这很可能只是编译器中未实现的功能,我建议打开雷达(bugreport.apple.com)。
最简单的解决方案是将元组声明为常量:
let stAnswer = (question: 1, answer: "Student's Answer")
let answerType = AnswerType.Subjective(stAnswer)
Run Code Online (Sandbox Code Playgroud)
如果这不切实际,那么在传递它之前进行常量复制(这是编译器应该能够自动执行的操作)。
var stAnswer = (question: 1, answer: "Student's Answer")
let values = stAnswer
let answerType = AnswerType.Subjective(values)
Run Code Online (Sandbox Code Playgroud)
您也可以使用闭包来强制复制。这对我来说有点过于棘手,但有些人可能更喜欢它:
let answerType = AnswerType.Subjective({stAnswer}())
Run Code Online (Sandbox Code Playgroud)
您还可以使用评论中的 @Rob 的解决方案(复制到此处以供将来的读者使用),这在我看来很好:
let answerType = AnswerType.Subjective(question: stAnswer.question, answer: stAnswer.answer)
Run Code Online (Sandbox Code Playgroud)