Swift开关和机箱功能处理

Swift开关和机箱功能处理,swift,Swift,我在学习swift的同时正在从事一个开源项目,同时,github存储库可以在上找到。我正在尝试向案例中添加一个标识符,该标识符将在UIActionSheet中每次按下按钮时运行函数。行动表的代码如下所示: @IBAction func rightButton(sender : AnyObject) { var sheet: UIActionSheet = UIActionSheet() let title: String = "Please choose a block rota

我在学习swift的同时正在从事一个开源项目,同时,github存储库可以在上找到。我正在尝试向案例中添加一个标识符,该标识符将在UIActionSheet中每次按下按钮时运行函数。行动表的代码如下所示:

@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)
}
我启动了开关来延迟哪个按钮是哪个:

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")
        }
    }

我希望每个案例都能被推到它自己的
func
方法中,我不确定我会如何处理这个问题,所以如果有人能帮忙,那就太好了。如果这个问题很难理解,请告诉我;所以我可以更好地在Stackoverflow上寻求帮助!提前谢谢。

我还不熟悉Swift,但通常的设置不是开关/机箱。相反,每个按钮都与一个动作相关联。那可能是回拨。这里,UIControl.sendAction和相关代码看起来像是开始的地方。

您可以创建一个单独的func,并传入buttonIndex。在那里,你可以选择if’s,也可以选择相同的开关

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 {

        }
    }

如果您的目标是iOS 8,那么就不应该使用UIActionSheets,因为它们已被弃用。将UIAlertController与首选样式UIAlertControllerStyleActionSheet一起使用,并使用addAction()方法向其中添加操作。

您猜得很好,但不正确。您可以通过查看文档轻松找到:@AnthonyKong您的链接指向一个不推荐使用的API。在OP的问题中,他使用的是
UIActionSheet
@AnthonyKong,坦白说,是误用。严肃地说:UI代码不应该充满组件发出信号的开关语句。我甚至不需要知道最好的方法,完全同意。但是您可以看到UIActionSheet的API设计要求用户这样做。也许这就是为什么它在iOS8中被弃用的原因。你的意思是,代替那些
print…
调用,你想使用一个函数吗?使用if/else的另一个方法调用你想要的方法,比在交换机的情况下只调用它有什么好处?这对我来说似乎是重复的/冗余的。java和C++ UI代码不适合这个模式。我意识到面向对象是对iOS/Mac操作系统的改进,但很难相信这被认为是最佳设计。Big Nerd Ranch的iOS程序设计的开始展示了在XCode UI设计器中建立连接,然后每个UI控件实现一个响应。这听起来更合理。