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 Enumerations and Optionals in Swift Introduction to Enumerations Enum Methods

imelda cloutier
PLUS
imelda cloutier
Courses Plus Student 2,597 Points

last chalenge in enum

I have no clue how to do that one. what type return a .plain or nil? am missing a kit?

buttons.swift
// Example of UIBarButtonItem instance
// let someButton = UIBarButtonItem(title: "A Title", style: .plain, target: nil, action: nil)

enum BarButton {
    case done(title: String)
    case edit(title: String)
}
let done = BarButton.done(title: "Save")

3 Answers

Matthew Long
Matthew Long
28,407 Points

It would probably be easier if you used Xcode to write the code for challenges. That's my experience at least. If you read the comments in the code challenge it may help you. It wants you to create a button method that returns an instance of UIBarButtonItem. An example of the instance is in the comments. The style should be UIBarButtonStyle.done for the done case and UIBarButtonStyle.plain for the edit case. I think it would accept an if statement as well but I did it using a switch statement:

enum BarButton {
  case done(title: String)
  case edit(title: String)

  func button() -> UIBarButtonItem {
    switch self {
    case .done(let title): return UIBarButtonItem(title: title, style: .done, target: nil, action: nil)
    case .edit(let title): return UIBarButtonItem(title: title, style: .plain, target: nil, action: nil)
    }
  }
}

let done = BarButton.done(title: "Save")
let button = done.button()
imelda cloutier
imelda cloutier
Courses Plus Student 2,597 Points

when I tried to put a return for UIBarButtonItem I got a compiler error. maybe I put it wrong. I ll try again. I use Xcode too.

Matthew Long
Matthew Long
28,407 Points

You'll need to import UIKit. That's pretty much the case anytime you see a class with the UI prefix.

I thought you were asking if you needed to import UIKit in the code challenge. No, you only need to import it in Xcode. I don't really know how the code challenge does it behind the scenes, but you don't need to import anything.

imelda cloutier
PLUS
imelda cloutier
Courses Plus Student 2,597 Points

why after case .dont you only put (let :title) not all of the component like the example he give back?