শূন্য এবং খালি জন্য স্ট্রিং পরীক্ষা করুন


134

সুইফটের জন্য nilএবং ""তারে স্ট্রিং চেক করার কোনও উপায় আছে ? রেলগুলিতে, আমি blank()চেক করতে ব্যবহার করতে পারি ।

আমার কাছে বর্তমানে এটি রয়েছে তবে এটি অতিমাত্রার চেয়ে বেশি মনে হচ্ছে:

    if stringA? != nil {
        if !stringA!.isEmpty {
            ...blah blah
        }
    }


1
(@ সূত্র এবং @ আইমানু-পেটিট) এর উত্তরগুলি আরও ভাল।
মিঃ মিং

উত্তর:


211

আপনি যদি alচ্ছিক স্ট্রিংগুলি নিয়ে কাজ করে থাকেন তবে এটি কাজ করে:

(string ?? "").isEmpty

??শূন্য কোয়ালেসিং অপারেটর বাম পাশে ফেরৎ যদি এটা অ শূন্য আছে, অন্যথায় এটি ডান দিকে ফেরৎ।

আপনি এটির মতো ডিফল্ট মান ফেরত দিতেও এটি ব্যবহার করতে পারেন:

(string ?? "").isEmpty ? "Default" : string!

3
মার্জিত ??? আপনি মূলত লিখেছিলেন, "যদি স্ট্রিং শূন্য আর খালি স্ট্রিং নয় এবং যে কল যে খালি ... কি একটি লজিক্যাল বিবৃতি।
Renetik

73

আপনি সম্ভবত যদি-লেট-ক্লউ ব্যবহার করতে পারেন:

সুইফট 3:

if let string = string, !string.isEmpty {
    /* string is not blank */
}

সুইফট 2:

if let string = string where !string.isEmpty {
    /* string is not blank */
}

2
এই রান টাইম ত্রুটি পেয়ে সুইফট 2 এর সাথে কাজ করে না fatal error: unexpectedly found nil while unwrapping an Optional valueতবে আমার ধ্রুবকের stringস্ট্রিং ডেটা রয়েছে।
নগেন্দ্র রাও

3
এটি সুইফ্ট 3 তে কাজ করে:if let string = string, !string.isEmpty { /* string is not blank */ }
এরিকস

1
guard letআপনি যদি বিবৃতিতে নীচে নিয়ন্ত্রণ প্রবাহটি শেষ করতে চান তবে @ এমআরলটিফাই একটি বিকল্প। তবে এখানে যে ধারাটিতে কোনও কিছুই আবৃত হচ্ছে না (এটি একটি বুলিয়ান অবহেলা)
রায়ান

সুতরাং এটি সম্পর্কে কী! স্ট্রিং = স্ট্রিংয়ের পরিবর্তে এমপিটি যেখানে স্ট্রিং! আইপিপি
পঙ্কজ

28

আপনি যদি সুইফট 2 ব্যবহার করছেন, এখানে আমার সহকর্মীর সাথে একটি উদাহরণ এলো যা isচ্ছিক স্ট্রিংগুলিতে নীলরোপ সম্পত্তি যুক্ত করে:

protocol OptionalString {}
extension String: OptionalString {}

extension Optional where Wrapped: OptionalString {
    var isNilOrEmpty: Bool {
        return ((self as? String) ?? "").isEmpty
    }
}

তারপরে আপনি Nচ্ছিক স্ট্রিংয়ের মধ্যেই ইসনিলঅরম্পটি ব্যবহার করতে পারেন

func testNilOrEmpty() {
    let nilString:String? = nil
    XCTAssertTrue(nilString.isNilOrEmpty)

    let emptyString:String? = ""
    XCTAssertTrue(emptyString.isNilOrEmpty)

    let someText:String? = "lorem"
    XCTAssertFalse(someText.isNilOrEmpty)
}

আপনি দয়া করে এখানে কী করেছেন বা কোনও সংস্থান যা এটি বিস্তারিতভাবে ব্যাখ্যা করতে পারে তা স্পষ্ট করে বলতে পারেন। পছন্দ করুন কেন ptionচ্ছিক স্ট্রিং ঘোষিত হয়? সিনট্যাক্স পাচ্ছি না। এটি সাধারণ এক্সটেনশন বাস্তবায়নের মতো নয় So অনেক আগে থেকেই ধন্যবাদ
বিনায়ক পরমার

@ বিনায়াকপারমার ptionচ্ছিক স্ট্রিং এখানে ঘোষণা করা হয়েছে কারণ where Wrapped:অবশ্যই কোনও প্রোটোকল নির্দিষ্ট করতে হবে এবং কোনও প্রকার নয়।
অ্যাডাম জনস

হতে পারে আপনি নাম কি হতে পারে isNilOrEmptyজন্য hasValue(বা ওই জাতীয় কিছু) এবং যুক্তিবিজ্ঞান বিপরীত
ইসলাম প্র:

28

guardবিবৃতি ব্যবহার করে

guardবিবৃতিটি সম্পর্কে জানার আগে আমি কিছুক্ষণের জন্য সুইফ্ট ব্যবহার করছিলাম । এখন আমি একটি বড় ভক্ত। এটি 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)

এটি alচ্ছিক স্ট্রিংটি মোড়ক করে এবং এটি একবারে খালি হয় না তা পরীক্ষা করে। যদি এটি শূন্য হয় (বা খালি), তবে আপনি অবিলম্বে আপনার ফাংশন (বা লুপ) থেকে এবং সমস্ত কিছু উপেক্ষা করার পরে ফিরে আসবেন। তবে যদি গার্ডের স্টেটমেন্টটি পাস হয়ে যায় তবে আপনি নিরাপদে আপনার মোড়ানো স্ট্রিংটি নিরাপদে ব্যবহার করতে পারেন।

আরো দেখুন


সতর্ক হোন. মুদ্রণ (মাইস্ট্রিং) চলবে না, যদি স্ট্রিং শূন্য বা খালি থাকে, কারণ গার্ডটি অন্য পর্যায়ে আসার পরে নিচে না পড়ার জন্য ডিজাইন করা হয়েছে।
কং বাইুল

কংবিউল, এটি সঠিক এবং এখানে যুক্তির উদ্দেশ্য। সম্ভবত স্ট্রিংটি nilখালি থাকলে, কেউ কল করতে চাইবে না print(myString)। আপনি যদি একটি পর এক্সিকিউশন চালিয়ে যাওয়ার জন্য প্রয়োজনীয় এমন nilবা খালি String, তাহলে আপনি ব্যবহার করেন if letবদলে guard
সুরগাচ

একটি প্রশংসা করার জন্য ধন্যবাদ। আমি জানি, আমি কেবল তাদেরকে বলি যারা প্রহরী সম্পর্কে বেশি জানেন না।
কং বাইুল

4
@ কাংবিউল আমি আপনার "সাবধানতা অবলম্বন করা" মন্তব্যটির বক্তব্যটি বুঝতে পারি না, আমি মনে করি এটি একটি দুর্দান্ত সমাধান থেকে মানুষকে ভয় দেখাবে, ফিরতি বিবৃতিটি গার্ডের অন্য বিবৃতিতে স্পষ্টভাবে সঠিক, আমার ধারণা আপনার মন্তব্য মুছে ফেলা উচিত
ব্রায়ান ওগডেন

16

সুইফট 5 এর সাহায্যে, আপনি বুলিয়ান সম্পত্তি সহ টাইপের Optionalজন্য একটি এক্সটেনশন প্রয়োগ করতে পারেন Stringযা returnsচ্ছিক স্ট্রিংয়ের কোনও মূল্য না থাকে বা খালি থাকলে ফিরে আসে:

extension Optional where Wrapped == String {

    var isNilOrEmpty: Bool {
        return self?.isEmpty ?? true
    }

}

তবে, প্রোটোকল অনুসারে সম্পত্তি Stringপ্রয়োগ isEmptyকরে Collection। অতএব আমরা পূর্ববর্তী কোডের জেনেরিক বাধ্যতা (প্রতিস্থাপন করতে পারেন Wrapped == Stringএকটি বৃহত্তর এক (সঙ্গে) Wrapped: Collection) যাতে Array, Dictionaryএবং Setএছাড়াও আমাদের নতুন উপকৃত isNilOrEmptyসম্পত্তি:

extension Optional where Wrapped: Collection {

    var isNilOrEmpty: Bool {
        return self?.isEmpty ?? true
    }

}

এর সাথে ব্যবহার String:

let optionalString: String? = nil
print(optionalString.isNilOrEmpty) // prints: true
let optionalString: String? = ""
print(optionalString.isNilOrEmpty) // prints: true
let optionalString: String? = "Hello"
print(optionalString.isNilOrEmpty) // prints: false

এর সাথে ব্যবহার Array:

let optionalArray: Array<Int>? = nil
print(optionalArray.isNilOrEmpty) // prints: true
let optionalArray: Array<Int>? = []
print(optionalArray.isNilOrEmpty) // prints: true
let optionalArray: Array<Int>? = [10, 22, 3]
print(optionalArray.isNilOrEmpty) // prints: false

সূত্র:


1
আমি ভালো, শুধুমাত্র খামচি আমি তৈরি করতে পারতাম থেকে এটা নামান্তর হয় isNilOrEmptyথেকে isEmptyOrNilপ্রিফিক্স মেলে তাই এটি স্বয়ংসম্পূর্ণ জন্য একই প্যাটার্ন মাধ্যমে সহজে সন্ধানযোগ্য নয় আছে। আমি সহকারীদের কাছ থেকে এই এক্সটেনশানটির আরও গ্রহণের বিষয়টি লক্ষ্য করেছি, কেবল তারা এইভাবে এটির সন্ধান করে তাদের সাথেই আমি কাজ করি।
হারুন

14
var str: String? = nil

if str?.isEmpty ?? true {
    print("str is nil or empty")
}

str = ""

if str?.isEmpty ?? true {
    print("str is nil or empty")
}

1
মার্জিত তবে বিশ্রী;), "সত্য" কিন্ডা অনুপ্রবেশ বন্ধ করে দেয়
TruMan1

9

আমি জানি যে এই প্রশ্নের অনেকগুলি উত্তর রয়েছে, তবে তাদের কোনওটিই UITextFieldডেটা বৈধকরণের জন্য এটি (আমার মতে) হিসাবে এতটা সুবিধাজনক বলে মনে হচ্ছে না , এটি এটির ব্যবহারের জন্য সবচেয়ে সাধারণ একটি বিষয়:

extension Optional where Wrapped == String {
    var isNilOrEmpty: Bool {
        return self?.trimmingCharacters(in: .whitespaces).isEmpty ?? true
    }
}

আপনি শুধু ব্যবহার করতে পারেন

textField.text.isNilOrEmpty

আপনি .trimmingCharacters(in:.whitespaces)যদি হোয়াইট স্পেসগুলি খালি স্ট্রিং হিসাবে বিবেচনা না করেন বা আরও জটিল ইনপুট পরীক্ষার জন্য ব্যবহার না করেন তবে আপনি এড়িয়ে যেতে পারেন

var isValidInput: Bool {
    return !isNilOrEmpty && self!.trimmingCharacters(in: .whitespaces).characters.count >= MIN_CHARS
}

গ্রেট উত্তর, অপ সুনির্দিষ্ট না করে থাকেন তাহলে অনুসরণকারী শূণ্যস্থান যেখানে তাই এখানে ফাঁকা হিসাবে গণনা আমার সংস্করণ: সর্বজনীন এক্সটেনশন ঐচ্ছিক যেখানে == স্ট্রিং আবৃত {Var isEmptyOrNil: bool {ফিরতি (স্ব ?? "") .isEmpty}}
sachadso

7

আমি সুপারিশ করতাম.

if stringA.map(isEmpty) == false {
    println("blah blah")
}

mapalচ্ছিক হলে ফাংশন যুক্তি প্রয়োগ করে .Some
প্লেগ্রাউন্ড ক্যাপচারটি নতুন সুইফট ১.২ এর সাথে আরেকটি সম্ভাবনাও দেখায় যদি alচ্ছিক বাঁধাই করা যায়।

এখানে চিত্র বর্ণনা লিখুন


7

আপনি যদি স্ট্রিংটিকে একটি অ-optionচ্ছিক হিসাবে অ্যাক্সেস করতে চান তবে আপনার রায়ান এর উত্তরটি ব্যবহার করা উচিত , তবে আপনি যদি কেবল স্ট্রিংয়ের শূন্যতা সম্পর্কে চিন্তা করেন তবে এর জন্য আমার পছন্দসই শর্টহ্যান্ড

if stringA?.isEmpty == false {
    ...blah blah
}

যেহেতু ==booচ্ছিক বুলিয়ানগুলির সাথে সূক্ষ্মভাবে কাজ করে, তাই আমি মনে করি এটি মূল উদ্দেশ্যটিকে অস্পষ্ট না করে কোডটি পাঠযোগ্য।

আপনি যদি বিপরীতটি যাচাই করতে চান: স্ট্রিংটি যদি হয় nilবা "", আমি সঠিক উদ্দেশ্যটি প্রদর্শনের জন্য উভয় ক্ষেত্রেই স্পষ্টভাবে পরীক্ষা করতে পছন্দ করি:

if stringA == nil || stringA?.isEmpty == true {
    ...blah blah
}

@ ট্রুম্যান 1 এটি সঠিক, প্রথম উদাহরণটির লক্ষ্য হ'ল স্ট্রিংটি খালি নেই কিনা তা পরীক্ষা করা ।
অ্যালেক্স প্রেটজ্লাভ

4

সুইফট 3

extension Optional where Wrapped == String {

    /// Checks to see whether the optional string is nil or empty ("")
    public var isNilOrEmpty: Bool {
        if let text = self, !text.isEmpty { return false }
        return true
    }
}

Alচ্ছিক স্ট্রিংয়ের মতো এটি ব্যবহার করুন:

if myString.isNilOrEmpty { print("Crap, how'd this happen?") } 

4

খালি স্ট্রিংয়ের সেরা উপায় চেকের জন্য সুইফট 3

if !string.isEmpty{

// do stuff

}

2

আপনি নিজের কাস্টম ফাংশনটি তৈরি করতে পারেন, যদি এটি এমন কিছু হয় যা আপনি অনেক কিছু প্রত্যাশা করেন।

func isBlank (optionalString :String?) -> Bool {
    if let string = optionalString {
        return string.isEmpty
    } else {
        return true
    }
}



var optionalString :String? = nil

if isBlank(optionalString) {
    println("here")
}
else {
    println("there")
}

2

সুইফ্ট 3 সমাধান alচ্ছিক আন-র্যাপড মানটি ব্যবহার করুন এবং বুলিয়ানটির বিরুদ্ধে পরীক্ষা করুন।

if (string?.isempty == true) {
    // Perform action
}

2

IsEmpty ব্যবহার করে

"Hello".isEmpty  // false
"".isEmpty       // true

AllSatisfy ব্যবহার করে

extension String {
  var isBlank: Bool {
    return allSatisfy({ $0.isWhitespace })
  }
}

"Hello".isBlank        // false
"".isBlank             // true

Alচ্ছিক স্ট্রিং ব্যবহার করে

extension Optional where Wrapped == String {
  var isBlank: Bool {
    return self?.isBlank ?? true
  }
}

var title: String? = nil
title.isBlank            // true
title = ""               
title.isBlank            // true

তথ্যসূত্র: https://useyourloaf.com/blog/empty-strings-in-swift/


1

একটি স্ট্রিং ক্লাস এক্সটেনশন তৈরি করুন:

extension String
{   //  returns false if passed string is nil or empty
    static func isNilOrEmpty(_ string:String?) -> Bool
    {   if  string == nil                   { return true }
        return string!.isEmpty
    }
}// extension: String

লক্ষ্য করুন এটি স্ট্রিংয়ে এক বা একাধিক ফাঁকা থাকলে সত্য ফিরে আসবে। ফাঁকা স্ট্রিংটিকে "খালি" হিসাবে বিবেচনা করতে, ব্যবহার করুন ...

return string!.trimmingCharacters(in: CharacterSet.whitespaces).isEmpty

... পরিবর্তে. এটি ফাউন্ডেশন প্রয়োজন।

এটি এভাবে ব্যবহার করুন ...

if String.isNilOrEmpty("hello world") == true 
{   print("it's a string!")
}

1

সুইফট 3 স্ট্রিংটি সত্যিই খালি কিনা তা খতিয়ে দেখতে এটি ভাল কাজ করে। কারণ শ্বেতক্ষেত্র আছে যখন ইস্পটি সত্য ফিরে আসে।

extension String {
    func isEmptyAndContainsNoWhitespace() -> Bool {
        guard self.isEmpty, self.trimmingCharacters(in: .whitespaces).isEmpty
            else {
               return false
        }
        return true
    }
}

উদাহরণ:

let myString = "My String"
myString.isEmptyAndContainsNoWhitespace() // returns false

let myString = ""
myString.isEmptyAndContainsNoWhitespace() // returns true

let myString = " "
myString.isEmptyAndContainsNoWhitespace() // returns false

1

আপনার এমন কিছু করা উচিত:
if !(string?.isEmpty ?? true) { //Not nil nor empty }

নিল কোয়েলেসিং অপারেটর চেক করে theচ্ছিক শূন্য না হলে, যদি এটি শূন্য না হয় তবে তার সম্পত্তিটি পরীক্ষা করে নিন, এক্ষেত্রে এমপিটি। কারণ এই alচ্ছিকটি আপনি কোনও ডিফল্ট মান সরবরাহ করতে পারবেন না যা আপনার alচ্ছিক শূন্য হলে ব্যবহৃত হবে।


1

এটি Collectionপ্রোটোকলের সাথে সামঞ্জস্যপূর্ণ সমস্ত ধরণের একটি সাধারণ সমাধান , যার মধ্যে রয়েছে String:

extension Optional where Wrapped: Collection {
    var isNilOrEmpty: Bool {
        self?.isEmpty ?? true
    }
}

0

স্থানীয় ডিবি থেকে সার্ভারে এবং এর বিপরীতে মানগুলি পাস করার সময়, আমি? 'S এবং! এর সাথে খুব বেশি সমস্যায় পড়ছিলাম এবং কী নয়।

সুতরাং নাল কেসগুলি পরিচালনা করতে আমি একটি সুইফট ৩.০ ইউটিলিটি তৈরি করেছি এবং কোডটিতে আমি প্রায় সম্পূর্ণ এড়াতে পারি?

func str(_ string: String?) -> String {
    return (string != nil ? string! : "")
}

উদা: -

আগে :

    let myDictionary: [String: String] = 
                      ["title": (dbObject?.title != nil ? dbObject?.title! : "")]

পরে:

    let myDictionary: [String: String] = 
                        ["title": str(dbObject.title)]

এবং যখন কোনও বৈধ স্ট্রিংয়ের জন্য এটি পরীক্ষা করা প্রয়োজন,

    if !str(dbObject.title).isEmpty {
        //do stuff
    }

এটি আমাকে যুক্তিসঙ্গতভাবে উপলব্ধি করার মতো কোড লেখার পরে অসংখ্য? এবং এর কোড যোগ করার এবং মুছে ফেলার সমস্যায় পড়তে পেরেছে।


0

টার্নারি অপারেটর (শর্তসাপেক্ষ অপারেটর নামেও পরিচিত C++ forever!) ব্যবহার করুন:

if stringA != nil ? stringA!.isEmpty == false : false { /* ... */ }

stringA!জোর করে unwrapping শুধুমাত্র যখন ঘটে stringA != nil, তাই এটি নিরাপদ। == falseভারবোসিটি মধ্যে এখনও অন্য বিস্ময়বোধক চিহ্ন চেয়ে কিছুটা পাঠযোগ্য !(stringA!.isEmpty)

আমি ব্যক্তিগতভাবে কিছুটা আলাদা ফর্ম পছন্দ করি:

if stringA == nil ? false : stringA!.isEmpty == false { /* ... */ }

উপরের বিবৃতিতে, এটি তাত্ক্ষণিকভাবে খুব স্পষ্ট যে ifকোনও ভেরিয়েবল হলে পুরো ব্লকটি কার্যকর হয় না nil


0

ইউআইটিেক্সটফিল্ড থেকে মান পাওয়ার nilএবং emptyস্ট্রিংয়ের জন্য পরীক্ষা করার সময় সহায়ক

@IBOutlet weak var myTextField: UITextField!

আপনার ফাংশনটি buttonহিয়ার করে (যখন আপনি ক ট্যাপ করবেন ) যা ইউআইটিেক্সটফিল্ড থেকে স্ট্রিং পায় এবং অন্য কিছু স্টাফ করে

@IBAction func getStringFrom_myTextField(_ sender: Any) {

guard let string = myTextField.text, !(myTextField.text?.isEmpty)!  else { return }
    //use "string" to do your stuff.
}

এটি স্ট্রিংয়ের nilপাশাপাশি মানের যত্ন নেবে empty

এটি আমার পক্ষে পুরোপুরি ভাল কাজ করেছে।


0

আমার মতে, শূন্য ও খালি স্ট্রিংটি যাচাই করার সর্বোত্তম উপায় হ'ল স্ট্রিংয়ের গণনা নেওয়া।

var nilString : String?
print(nilString.count) // count is nil

var emptyString = ""
print(emptyString.count) // count is 0

// combine both conditions for optional string variable
if string?.count == nil || string?.count == 0 {
   print("Your string is either empty or nil")
}

-4

আপনি এই ফানক ব্যবহার করতে পারেন

 class func stringIsNilOrEmpty(aString: String) -> Bool { return (aString).isEmpty }

2
একটি দ্রুত ব্যবহারকারী নয়; আপনি কি ব্যাখ্যা করতে পারেন যে শূন্যতা পাস হলে কেন এটি ব্যতিক্রম হয় না?
ফুন

এটি একটি ব্যতিক্রম ছুঁড়ে না কারণ আপনি nilএই ফাংশনটিতে মোটেও পাস করতে পারবেন না (অবজেক ব্যতীত, এটি প্রকৃতপক্ষে ক্রাশ হবে)।
আলফোনসো

এটি প্রশ্নের উত্তর দেয় না। এটি শূন্যতার জন্য পরীক্ষা করে না কারণ এটি কোনও accept
চ্ছিকভাবে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.