2016-08-19 10 views
7

मैं एक फ़ंक्शन घोषित करना चाहता हूं जिसे मैं केवल एक विशिष्ट एनम केस के लिए उपयोग कर सकता हूं। उदाहरण के लिए मेरे पास CustomTextFieldTypes enum है। इसमें निम्नलिखित मामले और कार्य हैं।स्विफ्ट एनम फ़ंक्शंस

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(...) समारोह कॉल करना चाहते हैं। एक और मामले से enum खुद नहीं। मुझे यह कैसे हासिल होगा? किसी भी मदद

संपादित- के लिए पहले से

धन्यवाद यहाँ मैं क्या कर रहा हूं पर कुछ पृष्ठभूमि है। मैं एक यूआई परीक्षण लिख रहा था जो टेक्स्ट फ़ील्ड में टेक्स्ट इनपुट करेगा। मैं इनपुट कोड को अपनी टेस्ट फाइल से दूर रखना चाहता था और मैंने enm और enum कार्यों के साथ "प्रयोग" शुरू किया। मैं सोच रहा था कि क्या मैं एक enum मामले के लिए स्पष्ट रूप से उपलब्ध एक समारोह हो सकता है। टिप्पणियों का निर्णय मैं यह नहीं कर सकता (मैंने ऑनलाइन जांच की लेकिन दूर नहीं मिली)। यह एक बुरा आर्किटेक्चर या कुछ भी नहीं है, मैं सिर्फ टेस्ट कोड को विभाजित कर रहा था ..

उत्तर देने के लिए सभी के लिए धन्यवाद।

+0

आप क्या करने की कोशिश कर रहे हैं? और 'XCUIElement' का उपयोग क्यों करें? वे केवल –

+0

परीक्षण के लिए हैं क्यों एक enum में एक समारोह डाल दिया? इसका क्या फायदा है? – Imbue

+1

आप एक समारोह के लिए केवल एक समारोह के लिए उपलब्ध नहीं कर सकते हैं। Enum में कोई भी कार्य enum के हर मामले के लिए उपलब्ध है। आपके छोटे कोड स्निपेट से, ऐसा लगता है कि आपके पास आर्किटेक्चर समस्या है और संभवतः ऐसा करने के लिए एक बेहतर डिज़ाइन के साथ आ सकता है जो आप करना चाहते हैं। आपके पास कोई बेहतर सलाह देने के लिए पर्याप्त जानकारी नहीं है। – keithbhunter

उत्तर

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 neeed तो case CardType(String, XCUIElement) करने के लिए case CardType(String) बदल सकते हैं और अन्य सभी कोड को अद्यतन करने के रूप में अच्छी तरह

7

आप एक स्विच प्रदर्शन कर सकते हैं कुछ मामलों के लिए कुछ कोड निष्पादित करने के लिए 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 
     } 
    } 
}