Passing var tuple to an Enum value

Passing a variable based on a variable directly to enumeration using Tuple-based values ​​results in a compilation error. For example:

I have an enumeration as shown below:

enum AnswerType  {
    case Objective(Int)
    case Subjective(question: Int, answer: String)
}

var stAnswer = (question: 1, answer: "Student Answer")

let answerType = AnswerType.Subjective(stAnswer) //Compilation error here - "Missing argument for parameter answer in call"

This gives a compiler error with Swift 2.1. But when I change stAnswerto constant use, let it work fine. Does anyone have an idea of ​​what causes a compiler error here?

+4
source share
3 answers

Swift var . . , , (bugreport.apple.com).

- :

let stAnswer = (question: 1, answer: "Student Answer")
let answerType = AnswerType.Subjective(stAnswer)

, ( ).

var stAnswer = (question: 1, answer: "Student Answer")
let values = stAnswer
let answerType = AnswerType.Subjective(values)

, . , :

let answerType = AnswerType.Subjective({stAnswer}())

@Rob ( ), :

let answerType = AnswerType.Subjective(question: stAnswer.question, answer: stAnswer.answer)
+2

A typealias :

typealias SubjectiveType = (question: Int, answer: String)

enum AnswerType  {
    case Objective(Int)
    case Subjective(SubjectiveType)
}

var stAnswer = SubjectiveType(question: 1, answer: "Student Answer")
stAnswer.answer = "Student revised answer"

let answerType = AnswerType.Subjective(stAnswer)

struct SubjectiveType .

+2

To use a tuple as an enumeration value, double-copy the tuple as follows:

enum AnswerType  {
    case Objective(Int)
    case Subjective((question: Int, answer: String)) 
    // One tuple value, rather than two non-tuple values
}

var stAnswer = (question: 1, answer: "Student Answer")

let answerType = AnswerType.Subjective(stAnswer) // No error now...
0
source

Source: https://habr.com/ru/post/1613776/


All Articles