douglas bumby
douglas bumby

Reputation: 324

Swift switches and case function handling

I'm working on an open source project while learning swift at the same time, the github repository is available at https://github.com/istx25/schedules. I'm trying to add an identifier to the case that will run a function everytime the button is pressed in a UIActionSheet. The code for the action sheet is as follows:

@IBAction func rightButton(sender : AnyObject) {
    var sheet: UIActionSheet = UIActionSheet()
    let title: String = "Please choose a block rotation"
    sheet.title  = title
    sheet.delegate = self
    sheet.addButtonWithTitle("Cancel")
    sheet.addButtonWithTitle("Day Four")
    sheet.addButtonWithTitle("Day Three")
    sheet.addButtonWithTitle("Day Two")
    sheet.addButtonWithTitle("Day One")
    sheet.cancelButtonIndex = 0
    sheet.showInView(self.view)
}

and I've started the switch to defer which button is which as:

func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
        switch buttonIndex {
        case 0:
            print("Go Back")
        case 1:
            print("Day Four")
            // Day Four Function
        case 2:
            print("Day Three")
            // Day Three Function
        case 3:
            print("Day Two")
            // Day Two Function
        case 4:
            print("Day One")
            // Day One Function
        default:
            print("Something's broken")
        }
    }

I'm wanting each case to be pushed to it's own func method and I'm not sure exactly how I would approach this, so please if anybody could help that would be great. If this question is hard to understand please tell me; so I can get better at asking for help on Stackoverflow! Thanks in advance.

Upvotes: 0

Views: 3047

Answers (3)

Damon Jones
Damon Jones

Reputation: 219

If you're targeting iOS 8 then you shouldn't be using UIActionSheets as they are deprecated. Use UIAlertController with a preferredStyle of UIAlertControllerStyleActionSheet and add actions to it with the addAction() method.

Upvotes: 2

Eytan Schulman
Eytan Schulman

Reputation: 566

You could create a separate func, and pass in buttonIndex. There you could either do if's or the same switch.

func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
            switch buttonIndex {
            case 0:
                print("Go Back")
                theFuction(buttonIndex)
            case 1:
                print("Day Four")
                // Day Four Function
                theFuction(buttonIndex)
            case 2:
                print("Day Three")
                // Day Three Function
                theFuction(buttonIndex)
            case 3:
                print("Day Two")
                // Day Two Function
                theFuction(buttonIndex)
            case 4:
                print("Day One")
                // Day One Function
                theFuction(buttonIndex)
            default:
                print("Something's broken")
            }
        }

    func theFuction (btnIndex: Int) {
        if btnIndex == 0 {

        } else if btnIndex == 1 {

        } else if btnIndex == 2 {

        } else if btnIndex == 3 {

        } else if btnIndex == 4 {

        }
    }

Upvotes: 0

Andrew Lazarus
Andrew Lazarus

Reputation: 19350

I'm not familiar with Swift (yet), but the usual setup is not with switch/case. Instead each button is associated with an action. That might be a callback. Here, UIControl.sendAction and related code looks like the place to start.

Upvotes: 1

Related Questions