我想声明一个我只能用于单个特定枚举案例的函数。
例如,我有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)
}
}
现在我只想为inputCardNumber(...)
案例调用CustomTextFieldTypes.CardNumber
函数。我可以做以下......
CustomTextFieldTypes.CardNumber.inputCardNumber(...)
但与此同时我可以做到这一点......
CustomTextFieldTypes.CardExpiryDate.inputCardNumber(...) or
CustomTextFieldTypes.CardNumber.inputCardNumber(...)
我只想为inputCardNumber(...)
案例调用CardNumber
函数。不是来自另一个案例的枚举本身。我如何实现这一目标?
提前感谢您提供任何帮助
编辑 - 这是我正在做的一些背景知识。我正在编写一个UI测试,可以将文本输入到文本字段中。我想保持输入代码远离我的测试文件,我开始使用枚举和枚举函数“试验”。我想知道我是否可以为枚举案件明确提供一个函数。从评论来看,我不能这样做(我在网上查了但没有走得太远)。这不是一个糟糕的架构或任何东西,我只是拆分测试代码..感谢大家的回复。
答案 0 :(得分:11)
您可以在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
}
}
}
答案 1 :(得分:2)
不知道为什么需要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)
并更新所有其他代码
答案 2 :(得分:1)
仅在匹配单个大小写时无需使用开关:
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)
}
}
}