【发布时间】:2016-12-26 22:42:39
【问题描述】:
我想声明一个只能用于单个特定枚举案例的函数。
例如,我有 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 测试,它将文本输入到文本字段中。我想让输入代码远离我的测试文件,我开始使用枚举和枚举函数“Experimenting”。我想知道我是否可以为枚举案例明确提供一个函数。从 cmets 来看,我不能这样做(我在网上查了一下,但没有走远)。这不是一个糟糕的架构或任何东西,我只是在拆分测试代码..
感谢大家的回复。
【问题讨论】:
-
你想做什么?为什么要使用
XCUIElement?它们仅用于测试 -
为什么要将函数放在枚举中?这样做有什么好处?
-
你不能让一个函数只对枚举的一种情况可用。枚举中的任何函数都可用于枚举的每种情况。从您的小代码 sn-p 来看,您似乎遇到了架构问题,并且可能会想出一个更好的设计来做您想做的事情。我们没有足够的信息给您更好的建议。
-
为什么
inputCardNumber和inputCardCCVNumber具有相同实现的不同函数?我怀疑你的问题比你在这里描述的要多。同意@keithbhunter,您可能有更深层次的设计问题。你的类型看起来是由内而外的。 -
我已经更新了问题,感谢您的回复。