2015-07-05 11 views
6

मैं एक तर्क हालत 'यदि जाने':हैंडल में केवल किसी और हालत तेजी से उपयोग करते हुए 'जहां'

if let login = login where validateLogin(login) { 
    // I'm not interesting with this condition 
} else { 
    // This is interesting 
} 

वहाँ किसी भी तरह लिखने के लिए अगर हालत बताने के लिए सही स्थिति नहीं संभाल (क्योंकि मैं नहीं चाहते किसी भी विकल्प है इसके साथ कुछ करने के लिए)? तो, कुछ अस्वीकृति की तरह:

!(if let login = login where validateLogin(login)) { 
    // This is interesting 
} 

सहायता के लिए धन्यवाद।

+0

जब तक मैं यहाँ कुछ याद आ रही है, तो आप की कोशिश करनी चाहिए: 'अगर जाने के लिए लॉग इन = लॉगिन जहां validateLogin (! प्रवेश) '। '=' से पहले '!' पर ध्यान दें। अगर यह करता है तो मुझे बताएं। – Ares

+0

अगर लॉगिन करने दें तो यह एक त्रुटि देता है! = लॉगिन। – edzio27

+0

नहीं, अगर aValue = anOptional एक पैटर्न मिलान करने वाला कथन है, तो तुलना नहीं। यदि anOptional में कोई मान होता है, तो यह मान को किसी नाम से जोड़ता है और ब्लॉक में प्रवेश करता है। –

उत्तर

5

में पहली शाखा अपनी हालत वास्तविक 2 मापदंड से बना है, तो:

  • if let का चेक है गैर-शून्य
  • where, एक शर्त का पालन के लिए एक वाक्यात्मक चीनी है जब आप कर सकते हैं सुनिश्चित करें कि चर शून्य नहीं है।

आप इस तरह तर्क रिवर्स कर सकते हैं:

if login == nil || !validateLogin(login!) { 
    // do something 
} 
7

स्विफ्ट में 1.2 कुछ इस तरह संभव नहीं है, लेकिन आप उपयोग कर सकते हैं:

// since where is logically the same as && 
if !(login != nil && validateLogin(login!)) { 
    // This is interesting 
} 

// or 
if login == nil || !validateLogin(login!) { 
    // This is interesting 
} 

जो तार्किक रूप से अपने वांछित रूप में ही है कार्यान्वयन। नोट: क्योंकि && और || ऑपरेटर दोनों बंद होने पर अभिव्यक्ति के दाहिने तरफ लपेटते हैं तो बल अनचाहे भी "सुरक्षित" होता है।

स्विफ्ट 2 की ओर देख रहे हम एक नए guard बयान जो पहले किसी और भाग संभालती मिलती है:

guard let login = login where validateLogin(login) else { 
    // This is interesting 
} 

// use the unwrapped login here if you want 
+3

यह भी ध्यान दें: गार्ड स्टेटमेंट के साथ आपको अन्य निकाय के भीतर 'रिटर्न', 'ब्रेक', 'जारी रखें' या '@ नॉरेनर्न' फ़ंक्शन होना होगा – Kametrixom

संबंधित मुद्दे