swift 快速枚举函数仅适用于枚举的单个情况?

xurqigkl  于 2023-02-03  发布在  Swift
关注(0)|答案(3)|浏览(116)

我想声明一个只能用于单个特定枚举情况的函数。
例如,我有CustomTextFieldTypes枚举,它有以下情况和函数。

enum CustomTextFieldTypes {

    case CardType
    case CardNumber
    case CardExpiryDate
    case CardName
    case CCVNumber

    func inputCardNumber(cardNumber: String!, cardNumberTextField: XCUIElement?) {        
       cardNumberTextField?.typeText(cardNumber)
    }

    func inputCardCCVNumber(cardCCVNumber: String!, cardCCVNumberTextField: XCUIElement?) {        
       cardCCVNumberTextField?.typeText(cardCCVNumber)
    }
}

现在我只想在CustomTextFieldTypes.CardNumber的情况下调用inputCardNumber(...)函数。

CustomTextFieldTypes.CardNumber.inputCardNumber(...)

但与此同时我也可以...

CustomTextFieldTypes.CardExpiryDate.inputCardNumber(...) or    
CustomTextFieldTypes.CardNumber.inputCardNumber(...)

我只想在CardNumber的情况下调用inputCardNumber(...)函数,而不是在另一个情况下调用枚举本身,我该如何实现呢?
提前感谢您的帮助
编辑-这里是我正在做的一些背景。我正在写一个UI测试,它将文本输入到文本字段中。我想让输入代码远离我的测试文件,我开始了"实验"枚举和枚举函数。我想知道我是否可以有一个函数显式地用于枚举情况。从评论中判断,我不能这样做(我在网上查了一下,但没有查到太多)。这不是一个糟糕的架构或任何东西,我只是分裂测试代码..
感谢大家的回复。

nukf8bse

nukf8bse1#

您可以在self上执行一个开关,以便在某些情况下执行某些代码。

enum CustomTextFieldTypes {

    case cardType
    case cardNumber
    case cardExpiryDate
    case cardName
    case ccvNumber

    func inputCardNumber(cardNumber: String!, cardNumberTextField: XCUIElement?) {  
        switch self {
        case .cardNumber:
            cardNumberTextField?.typeText(cardNumber)
        default:
            return
        }
    }
}
9o685dep

9o685dep2#

当您只想匹配单个大小写时,无需使用开关:

enum CustomTextFieldTypes {

  case cardType
  case cardNumber
  case cardExpiryDate
  case cardName
  case ccvNumber

  func inputCardNumber(cardNumber: String!, cardNumberTextField: XCUIElement?) {
    if case .cardNumber = self {
        cardNumberTextField?.typeText(cardNumber)
    }
  }
}
eqzww0vc

eqzww0vc3#

不确切知道为什么需要XCUIElements,但执行如下操作

//MARK: Declaration
enum CustomTextFieldTypes {
    case CardType(String)
    case CardNumber(String)
    case CardExpiryDate(String)
    case CardName(String)
    case CCVNumber(String)
}

//MARK: Definition
var cardNumber = CustomTextFieldTypes.CardNumber("123")
var cardExpiry = CustomTextFieldTypes.CardExpiryDate("10-10-2016")

//MARK: Usage
func useCard(type: CustomTextFieldTypes)
{
    switch type {
    case .CardNumber(let numberString):
          print(numberString)
    case .CardType(let cardtype):
          print(cardtype)
    case .CardExpiryDate(let expiryDate):
          print(expiryDate)
    case .CardName(let name):
          print(name)
    case .CCVNumber(let ccvnumber):
        print(ccvnumber)
    }

}

useCard(cardNumber)
useCard(cardExpiry)

如果确实需要XCUIElement,请将case CardType(String)更改为case CardType(String, XCUIElement),并更新所有其他代码

相关问题