[英]Swift enum function for only a single case of the enum?
我想聲明一個我只能用於單個特定枚舉案例的函數。
例如,我有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(...)
我只是想打電話給inputCardNumber(...)
的功能CardNumber
情況。 不是來自另一個案例的枚舉本身。 我該如何實現這一目標?
在此先感謝您的幫助
編輯 - 這是我正在做的一些背景。 我正在編寫一個UI測試,可以將文本輸入到文本字段中。 我想保持輸入代碼遠離我的測試文件,我開始使用枚舉和枚舉函數進行“ 試驗 ”。 我想知道我是否可以為枚舉案件明確提供一個函數。 從評論來看,我不能這樣做(我在網上查了但沒有走得太遠)。 這不是一個糟糕的架構或任何東西,我只是拆分測試代碼..
感謝大家的回復。
您可以對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
}
}
}
不知道為什么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)
並更新所有其他代碼
當您只想匹配單個案例時,無需使用開關:
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.