Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

iOS Swift 2.0 Enumerations and Optionals Introduction to Enumerations Enum Methods

Jason Teo
PLUS
Jason Teo
Courses Plus Student 8,398 Points

How do I solve this question?

How do I correctly pass the associated value of .Done?

3 Answers

Ritesh R
PLUS
Ritesh R
Courses Plus Student 17,865 Points

Try this code..

enum Button {
    case Done(String)
    case Edit(String)

    func toUIBarButtonItem() -> UIBarButtonItem {
        switch self {

        case .Done: return UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)

        case .Edit: return UIBarButtonItem(title: "Plain", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
        }

    }

}

let done = Button.Done("Done")
let doneButton = done.toUIBarButtonItem()

The correct code is:

enum Button {
    case Done(String?)
    case Edit(String?)

    func toUIBarButtonItem() -> UIBarButtonItem {
        switch self {

        case Done: return UIBarButtonItem(title: "Done", style: UIBarButtonStyle.Done, target: nil, action: nil)

        case Edit: return UIBarButtonItem(title: "Plain", style: UIBarButtonStyle.Plain, target: nil, action: nil)
        }

    }

}

let done = Button.Done("Done")
let doneButton = done.toUIBarButtonItem()
Marina Alenskaja
Marina Alenskaja
9,320 Points

Why did you change the associated values to optionals? In the challenge, it's written as: case Done(String).

I was correcting Ritesh R's code where he was using optional. The correct code without switching associated values is :

 enum Button {
    case Done(String)
    case Edit(String)

  func toUIBarButtonItem() -> UIBarButtonItem {
        switch self {
        case .Done: return UIBarButtonItem(title: "Done", style: UIBarButtonStyle.Done, target: nil, action: nil)
        case .Edit: return UIBarButtonItem(title: "edit", style: UIBarButtonStyle.Plain, target: nil, action: nil)
        }
    }
}

let done = Button.Done("Done")
let doneButton = done.toUIBarButtonItem()

both methods work with the latter being the most correct.

Ritesh R
PLUS
Ritesh R
Courses Plus Student 17,865 Points

I was trying the code challenge in a playground & after the optional course i just put it there just in case, as it was getting difficult to complete the challenge. Thanks @johnhenri

anytime Ritesh R