【问题标题】:Swift How to use Switch statement in method with 4 inputs(SENDER)Swift 如何在 4 个输入的方法中使用 Switch 语句(SENDER)
【发布时间】:2021-02-09 19:40:13
【问题描述】:

我有问题!这段代码在我的 veiwController 中运行良好。但我想把它移到我的结构中,然后调用一个函数!这个

@IBOutlet weak var billTextField: UITextField!
@IBOutlet weak var zeroPctButton: UIButton!
@IBOutlet weak var tenPctButton: UIButton!
@IBOutlet weak var twentyPctButton: UIButton!
@IBOutlet weak var splitNumberLabel: UILabel!


@IBAction func tipChanged(_ sender: UIButton) {
   
    
    
    billTextField.becomeFirstResponder()
    
    switch sender {
    case zeroPctButton:
        zeroPctButton.isSelected = true
        tenPctButton.isSelected = false
        twentyPctButton.isSelected = false
        billTextField.endEditing(true)
    case twentyPctButton:
        tenPctButton.isSelected = false
        zeroPctButton.isSelected = false
        twentyPctButton.isSelected = true
        billTextField.endEditing(true)
    case tenPctButton:
        twentyPctButton.isSelected = false
        zeroPctButton.isSelected = false
        tenPctButton.isSelected = true
        billTextField.endEditing(true)
    default:
        print("error")
    }

在我尝试使用 4 个输入创建我的方法后,它不起作用!

    struct Switch {



    func switchButton(zero: UIButton, ten: UIButton, twenty: UIButton, bill: UITextField)  {
        
        switch UIButton() {
        case zero :
        zero.isSelected = true
        ten.isSelected = false
        twenty.isSelected = false
        bill.endEditing(true)
        
        case twenty :
      ten.isSelected = false
        zero.isSelected = false
       twenty.isSelected = true
     bill.endEditing(true)
        case ten:
        twenty.isSelected = false
        zero.isSelected = false
        ten.isSelected = true
        bill.endEditing(true)
    default: print("Error")

当我将开关 Uibutton() 更改为零(例如)时,它与这个按钮一起工作!

    struct Switch {



    func switchButton(zero: UIButton, ten: UIButton, twenty: UIButton, bill: UITextField)  {
        
        switch zero {
        case zero :
        zero.isSelected = true
        ten.isSelected = false
        twenty.isSelected = false
        bill.endEditing(true)
        
        case twenty :
      ten.isSelected = false
        zero.isSelected = false
       twenty.isSelected = true
     bill.endEditing(true)
        case ten:
        twenty.isSelected = false
        zero.isSelected = false
        ten.isSelected = true
        bill.endEditing(true)
    default: print("Error")

我尝试使用嵌套函数,但对我不起作用(我还创建了另一个具有 4 个输入的结构,我将其添加到我的主结构中的代码中。 我尝试了很多我无法停止的事情!请帮我理解!

【问题讨论】:

    标签: xcode switch-statement case


    【解决方案1】:

    你原来的工作代码是这样声明函数的:

    @IBAction func tipChanged(_ sender: UIButton) {
    

    它有以下特点:

    • 这是一个类型的方法(顶级函数)。

    • 那个类型是一个 NSObject 子类。

    • 该方法标有@IBAction(或@objc)。

    • 该方法有一个参数,发送者,类型为Any。

    如果您的目标是让界面中的按钮在被点击时调用此方法,那是一种 Objective-C / Cocoa 机制。所以所有这些事情必须是真的。

    这个方法的类型不能是结构体;在这里运行的 Objective-C / Cocoa 根本看不到 Swift 结构。并且该方法必须通过@IBAction(或@objc)显式暴露给Objective-C。并且该方法必须具有正确的签名:无参数,或一个参数(通常键入为 Any 或 UIButton 或类似的类型),因为这是该机制可以调用的格式。

    【讨论】:

    • 所以,如果我想创建可以与@IBAction 一起使用的东西,我需要有正确的签名:没有参数,或者一个参数(通常键入为 Any 或 UIButton 或类似的),因为这是该机制可以调用的格式。 ?所以我只能使用一个按钮?
    • 我没这么说。你可以让四个不同的按钮调用同一个方法,没问题,就像你在开始时所做的那样。我不太明白此时的问题是什么。看来你有工作代码,你把它扔掉了。但它有什么问题呢?你的代码很正常。只是您想将大部分代码移动到辅助函数中吗?在这种情况下,工作方法调用辅助函数。
    • 是的,我的代码正在运行,但我创建了另一个文件。我将把我所有的函数放在结构中,只调用它们。我创建了 switchButton 方法只是为了在我的 IBACtion 函数中从 struct 调用它。但我不明白为什么它不能使用 4 个输入。
    • 好吧,你这么说,但你没有显示任何 code 你的tipChanged 方法调用你的switchButton 方法,所以我不知道你是什么正在尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多