स्विफ्ट में खाली स्ट्रिंग की जाँच करें?


165

उद्देश्य C में, कोई स्ट्रिंग्स की जांच करने के लिए निम्न कार्य कर सकता है:

if ([myString isEqualToString:@""]) {
    NSLog(@"myString IS empty!");
} else {
    NSLog(@"myString IS NOT empty, it is: %@", myString);
}

स्विफ्ट में खाली तारों का पता कैसे चलता है?


3
आपका उद्देश्य कोड गलत है। यह नील के तारों के लिए बुरी तरह से विफल रहता है। उद्देश्य C में वास्तव में एक का उपयोग किया जाता है: if (myString.length) {'इसकी लंबाई के साथ एक स्ट्रिंग}। यह नील तार पर भी काम करता है। यह सरल और पढ़ने में आसान है।
टॉम एंडरसन

जवाबों:


241

अब खाली स्ट्रिंग का पता लगाने की क्षमता में बनाया गया है .isEmpty:

if emptyString.isEmpty {
    print("Nothing to see here")
}

Apple प्री-रिलीज़ डॉक्यूमेंटेशन: "स्ट्रिंग्स एंड कैरेक्टर्स"


1
आप isEqualToString का भी उपयोग कर सकते हैं, जो काम में आता है यदि आप NSString ('var blankString: NSString') के साथ var को इनिशियलाइज़ कर रहे हैं: blankString.isEqualToString (")"
Sven

1
उपयोगकर्ता द्वारा रिक्त स्थान दर्ज करने पर यह स्थिति विफल हो जाती है।
शानू सिंह

अद्यतन: यहाँ है
खाली

108

यह जांचने का एक संक्षिप्त तरीका है कि क्या स्ट्रिंग शून्य है या खाली है:

var myString: String? = nil

if (myString ?? "").isEmpty {
    print("String is nil or empty")
}

यह सुंदर है, लेकिन आप अलिखित मूल्य का उपयोग कैसे करेंगे? फोर्स अनप्रैप?
Nostalg.io

5
@halfnibble आप या तो कर सकते हैं (निहित या मजबूर पूर्ववत्) या आप कर सकते हैं:if let myString = myString where !myString.isEmpty { ... }
अल्बर्ट बोरी

52

मैं पूरी तरह से अपना जवाब ( फिर से ) लिख रहा हूं । इस बार ऐसा इसलिए है क्योंकि मैं guardबयान और शुरुआती वापसी का प्रशंसक बन गया हूं । यह बहुत क्लीनर कोड के लिए बनाता है।

गैर-वैकल्पिक स्ट्रिंग

शून्य लंबाई के लिए जाँच करें।

let myString: String = ""

if myString.isEmpty {
    print("String is empty.")
    return // or break, continue, throw
}

// myString is not empty (if this point is reached)
print(myString)

यदि ifकथन गुजरता है, तो आप यह जानकर स्ट्रिंग का उपयोग कर सकते हैं कि यह खाली नहीं है। यदि यह खाली है, तो फ़ंक्शन जल्दी वापस आ जाएगा और इसके बाद कुछ भी नहीं मायने रखता है।

वैकल्पिक स्ट्रिंग

शून्य या शून्य लंबाई के लिए जाँच करें।

let myOptionalString: String? = nil

guard let myString = myOptionalString, !myString.isEmpty else {
    print("String is nil or empty.")
    return // or break, continue, throw
}

// myString is neither nil nor empty (if this point is reached)
print(myString)

यह वैकल्पिक को खोल देता है और जांचता है कि यह एक ही समय में खाली नहीं है। guardस्टेटमेंट पास करने के बाद , आप सुरक्षित रूप से अपने अलिखित गैर-रिक्त स्ट्रिंग का उपयोग कर सकते हैं।


40

Xcode में 11.3 स्विफ्ट 5.2 और बाद में

उपयोग

var isEmpty: Bool { get } 

उदाहरण

let lang = "Swift 5"

if lang.isEmpty {
   print("Empty string")
}

अगर आप सफेद जगहों को नजरअंदाज करना चाहते हैं

if lang.trimmingCharacters(in: .whitespaces).isEmpty {
   print("Empty string")
}

2
क्या आपके उत्तर और एक अपवाद के बीच अंतर है?
अहमद एफ

यह काम नहीं करता है अगर उपयोगकर्ता सिर्फ रिक्त स्थान का एक गुच्छा में प्रवेश करता है।
सुपरटेकनेबॉफ़

2
टाइपोग्राफी में व्हॉट्सएप को एक चरित्र माना जाता है, इसलिए यह खाली नहीं है। यदि आप चाहते हैं तो स्थिति को 'lang.trimmingCharacters (: .whitespaces) .isEmpty' में
बदलें

28

यहां बताया गया है कि स्ट्रिंग खाली है या नहीं, इसकी जांच मैं कैसे करूं। 'रिक्त' से मेरा मतलब है कि एक स्ट्रिंग जो या तो खाली है या जिसमें केवल स्थान / न्यूलाइन वर्ण हैं।

struct MyString {
  static func blank(text: String) -> Bool {
    let trimmed = text.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
    return trimmed.isEmpty
  }
}

कैसे इस्तेमाल करे:

MyString.blank(" ") // true

7
और एक विस्तार के रूप में ... gist.github.com/danielgomezrico/f852114508c1cfaaa849
डैनियल गोमेज़ रिको

2
एक परिशिष्ट के रूप में, आप व्हॉट्सएप का उपयोग करने पर विचार कर सकते हैं।
fwielstra

1
धन्यवाद @fwielstra, नई लाइनों की अनदेखी करना बहुत उपयोगी होगा।
Evgenii

14

आप एक वैकल्पिक एक्सटेंशन का उपयोग भी कर सकते हैं ताकि आपको अलिखित या उपयोग करने की चिंता न हो == true:

extension String {
    var isBlank: Bool {
        return self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
    }
}
extension Optional where Wrapped == String {
    var isBlank: Bool {
        if let unwrapped = self {
            return unwrapped.isBlank
        } else {
            return true
        }
    }
}

नोट: इसे वैकल्पिक पर कॉल करते समय, सुनिश्चित करें कि इसका उपयोग नहीं करना है ?या फिर इसे अभी भी अनचाहे की आवश्यकता होगी।


1
इस बारे में उत्साहित है, लेकिन यह काम नहीं किया :( मैं स्विफ्ट 3.0 पर हूँ
teradyl

@teradyl By "काम नहीं किया," क्या आपका मतलब है कि आप एक त्रुटि प्राप्त कर रहे हैं, स्वत: पूर्ण या कुछ और के साथ समस्या हो रही है? यह तब तक काम करना चाहिए जब तक कि कुछ ऐसा न बदल जाए जिसके बारे में मुझे जानकारी नहीं है, लेकिन स्वत: पूर्णता हमेशा सही संस्करण नहीं चुनेगी।
जॉन मॉन्टगोमरी

जैसा कि मैं अभी भी एक संकलन-समय त्रुटि प्राप्त करता हूं जब मैं उपयोग करने की कोशिश करता हूं optionalString?isBlankकि इसे अलिखित करने की आवश्यकता होती है।
टेराडिल

1
मेरे लिए, यह साथ काम नहीं कर रहा है currentIncident.priority?.description.isBlank। कहते हैं Value of optional type 'Bool?' not unwrapped; did you mean to use '!' or '?'?। मुझे वह करना है (currentIncident.priority?.description ?? "").isBlankजो एक्सटेंशनों को व्यर्थ बनाता है। स्विफ्ट 4.1।
कार्स्टन हेजमैन

1
@CarstenHagemann ऐसा इसलिए priorityहै क्योंकि वहाँ वैकल्पिक है। यदि बस descriptionवैकल्पिक होते तो यह काम करता, लेकिन आप एक पैरेंट ऑब्जेक्ट के आसपास वैकल्पिक होने के नाते काम नहीं कर सकते (क्योंकि अगर priorityशून्य है, तो यह descriptionपहली जगह में खाली-नेस की जांच करने के लिए भी संपत्ति नहीं है)।
जॉन मोंटगोमरी

9

नील जांच और लंबाई एक साथ करने के लिए स्विफ्ट 2.0 और आईओएस 9 इसके बाद आप उपयोग कर सकते हैं

if(yourString?.characters.count > 0){}

4

ismpty जैसा आप सोचते हैं कि अगर यह स्ट्रिंग == "" होगा, तो यह सच हो जाएगा। कुछ अन्य उत्तर एक ऐसी स्थिति की ओर इशारा करते हैं, जहाँ आपके पास एक वैकल्पिक स्ट्रिंग है।

कृपया वैकल्पिक चेनिंग का उपयोग करें !!!!

यदि स्ट्रिंग शून्य नहीं है, तो इस्मिप्ट का उपयोग किया जाएगा, अन्यथा यह नहीं होगा।

नीचे, वैकल्पिक स्ट्रिंग सेट नहीं किया जाएगा क्योंकि स्ट्रिंग शून्य है

let optionalString: String? = nil
if optionalString?.isEmpty == true {
     optionalString = "Lorem ipsum dolor sit amet"
}

जाहिर है आप उपरोक्त कोड का उपयोग नहीं करेंगे। लाभ JSON पार्सिंग या ऐसी अन्य स्थितियों से आता है जहां आपके पास या तो मूल्य है या नहीं। मान होने पर यह गारंटी कोड चलाया जाएगा।


2

पाठ में केवल रिक्त स्थान और newlines वर्ण के लिए जाँच करें

extension String
{
    var  isBlank:Bool {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).isEmpty
    }
}

का उपयोग करते हुए

if text.isBlank
{
  //text is blank do smth
}

1

वैकल्पिक स्ट्रिंग्स के बारे में कैसे:

if let string = string where !string.isEmpty
{
    print(string)
}



0

मैं स्ट्रिंग या एरे की तरह दिखने वाले छोटे विस्तार को जोड़ने की सिफारिश कर सकता हूं

extension Collection {
    public var isNotEmpty: Bool {
        return !self.isEmpty
    }
}

इसके साथ आप कोड लिख सकते हैं जो पढ़ने में आसान है। इस दो लाइनों की तुलना करें

if !someObject.someParam.someSubParam.someString.isEmpty {}

तथा

if someObject.someParam.someSubParam.someString.isNotEmpty {}

याद करना आसान है ! मुट्ठी लाइन की शुरुआत में साइन इन करें।


0

आप इस एक्सटेंशन का उपयोग कर सकते हैं:

extension String {

    static func isNilOrEmpty(string: String?) -> Bool {
        guard let value = string else { return true }

        return value.trimmingCharacters(in: .whitespaces).isEmpty
    }

}

और फिर इसे इस तरह उपयोग करें:

let isMyStringEmptyOrNil = String.isNilOrEmpty(string: myString)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.