har*_*t07 11 enums function ios swift
我想声明一个我只能用于单个特定枚举案例的函数.
例如,我有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)
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想inputCardNumber(...)只为这个CustomTextFieldTypes.CardNumber案例调用该函数 .我可以做以下......
CustomTextFieldTypes.CardNumber.inputCardNumber(...)
Run Code Online (Sandbox Code Playgroud)
但与此同时,我可以做到这一点......
CustomTextFieldTypes.CardExpiryDate.inputCardNumber(...) or
CustomTextFieldTypes.CardNumber.inputCardNumber(...)
Run Code Online (Sandbox Code Playgroud)
我只想调用案例的inputCardNumber(...)功能CardNumber.不是来自另一个案例的枚举本身.我该如何实现这一目标?
在此先感谢您的帮助
编辑 - 这是我正在做的一些背景.我正在编写一个UI测试,可以将文本输入到文本字段中.我想保持输入代码远离我的测试文件,我开始使用枚举和枚举函数进行" 试验 ".我想知道我是否可以为枚举案件明确提供一个函数.从评论来看,我不能这样做(我在网上查了但没有走得太远).这不是一个糟糕的架构或任何东西,我只是拆分测试代码..
感谢大家的回复.
Aar*_*ron 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
当您只想匹配单个案例时,无需使用 switch:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
}
不知道为什么需要 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)
Run Code Online (Sandbox Code Playgroud)
如果您确实需要 XCUIElement,则更改为case CardType(String)并case CardType(String, XCUIElement)更新所有其他代码
| 归档时间: |
|
| 查看次数: |
12985 次 |
| 最近记录: |