[英]Swift enum function for only a single case of the enum?
I want to declare a function which I can only use for a single specific enum case. 我想声明一个我只能用于单个特定枚举案例的函数。
For example I have CustomTextFieldTypes enum. 例如,我有CustomTextFieldTypes枚举。 This has the following cases and functions. 这具有以下情况和功能。
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)
}
}
Now I want to call the inputCardNumber(...)
function only for the CustomTextFieldTypes.CardNumber
case. 现在我想只为CustomTextFieldTypes.CardNumber
案例调用inputCardNumber(...)
函数。 I can do the following... 我可以做以下......
CustomTextFieldTypes.CardNumber.inputCardNumber(...)
But at the same time I can do this... 但与此同时,我可以做到这一点......
CustomTextFieldTypes.CardExpiryDate.inputCardNumber(...) or
CustomTextFieldTypes.CardNumber.inputCardNumber(...)
I only want to call the inputCardNumber(...)
function for the CardNumber
case. 我只是想打电话给inputCardNumber(...)
的功能CardNumber
情况。 Not from another case the enum itself. 不是来自另一个案例的枚举本身。 How do I achieve this? 我该如何实现这一目标?
Thanks in advance for any help 在此先感谢您的帮助
EDIT- Here's some background on what I'm doing. 编辑 - 这是我正在做的一些背景。 I was writing a UI test which would input text into text fields. 我正在编写一个UI测试,可以将文本输入到文本字段中。 I wanted to keep the input code away from my test file and I started " Experimenting " with enums and enum functions. 我想保持输入代码远离我的测试文件,我开始使用枚举和枚举函数进行“ 试验 ”。 I was wondering if I could have a function explicitly available for an enum case. 我想知道我是否可以为枚举案件明确提供一个函数。 Judging from the comments I cannot do this (I checked online but didn't get far). 从评论来看,我不能这样做(我在网上查了但没有走得太远)。 It's not a bad architecture or anything, I was just splitting up test code.. 这不是一个糟糕的架构或任何东西,我只是拆分测试代码..
Thanks for everyone for replying. 感谢大家的回复。
You can perform a switch on self
in order to execute certain code for certain cases. 您可以对self
进行切换,以便在某些情况下执行某些代码。 Here's an example: 这是一个例子:
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
}
}
}
Dont know exactly why are XCUIElements needed but do something like this 不知道为什么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)
If you really neeed XCUIElement then change case CardType(String)
to case CardType(String, XCUIElement)
and update all the other code as well 如果您真的需要XCUIElement,那么将case CardType(String)
更改为case CardType(String, XCUIElement)
并更新所有其他代码
No need to use a switch when you only want to match a single case: 当您只想匹配单个案例时,无需使用开关:
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)
}
}
} }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.