Swiftで空の文字列を確認しますか?


165

Objective Cでは、次のようにして文字列をチェックできます。

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

Swiftで空の文字列を検出するにはどうすればよいですか?


3
あなたの客観的なコードは間違っています。これは、nil文字列ではひどく失敗します。目的Cでは実際に使用します:if(myString.length){'its length with a string}。これはnil文字列でも機能します。それはシンプルで読みやすいです。
トムアンデルセン

回答:


240

空の文字列を検出する機能が組み込まれています.isEmpty

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

アップルプレリリースのドキュメント:「文字列と文字」


1
isEqualToStringを使用することもできます。これは、NSString( 'var emptyString:NSString')で変数を初期化する場合に便利です。emptyString.isEqualToString( "")
Sven

1
ユーザーがスペースを入力すると、この条件は失敗します。
シャヌシン


108

文字列がnilまたは空かどうかを確認する簡潔な方法は次のとおりです。

var myString: String? = nil

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

これは美しいですが、ラップされていない値をどのように使用しますか?強制的にアンラップしますか?
Nostalg.io 2016年

5
@halfnibbleあなたはどちらか(暗黙的または強制アンラップ)を行うこともできますし、何ができる:if let myString = myString where !myString.isEmpty { ... }
アルバートBori

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文が渡され、その後、あなたは安全にそれが空でないことを知っている文字列を使用することができます。空の場合、関数は早期に戻り、その後は何も戻りません。

オプションの文字列

nilまたはゼロの長さを確認してください。

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 Swift 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
あなたの答えと例外の答えに違いはありますか?
Ahmad F

これは、ユーザーがたくさんのスペースを入力しただけでは機能しません。
Supertecnoboff

2
タイポグラフィでは、空白は文字と見なされるため、空ではありません。必要に応じて、条件を 'lang.trimmingCharacters(in:.whitespaces).isEmpty'に変更します
Saranjith

28

文字列が空白かどうかを確認する方法は次のとおりです。「空白」とは、空の文字列またはスペース/改行文字のみを含む文字列を意味します。

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

使い方:

MyString.blank(" ") // true


2
補足として、空白だけでなくwhitespaceAndNewlineCharacterSetの使用を検討することもできます。
fwielstra 2015

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
これについて興奮しましたが、うまくいきませんでした:(私はSwift 3.0を使用しています
teradyl

@teradyl「機能しなかった」ということは、エラーが発生した、オートコンプリートで問題が発生した、などの意味ですか?私が気づいていない変更がなければ動作しますが、オートコンプリートが常に正しいバージョンを選択するとは限りません。
John Montgomery

のように、optionalString?isBlankアンラップする必要があることを使用しようとすると、コンパイル時エラーが発生します。
teradyl 2017

1
私にとって、これはでは機能しませんcurrentIncident.priority?.description.isBlank。言う:Value of optional type 'Bool?' not unwrapped; did you mean to use '!' or '?'?。私はそうしなければならない(currentIncident.priority?.description ?? "").isBlankので、拡張機能は無意味になります。Swift 4.1。
Carsten Hagemann、2018

1
@CarstenHagemannそれpriorityはそこにオプションがあるためです。ちょうど場合はdescription、オプションだった、それは動作しますが、あなたは親オブジェクト(場合ので、そのようなオプションであることを回避することはできませんprioritynilで、それも持っていないdescription最初の場所に空白ネスをチェックするためにプロパティを)。
ジョンモンゴメリー

9

nilチェックと長さを同時に行うには、Swift 2.0とiOS 9以降を使用できます

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

4

isEmptyは、思ったとおりに動作します。string== ""の場合、trueを返します。他の回答のいくつかは、オプションの文字列がある状況を示しています。

オプションのチェーンを使用してください!!!!

文字列がnilでない場合、isEmptyが使用され、それ以外の場合は使用されません。

以下では、文字列がnilであるため、optionalStringは設定されません。

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

もちろん、上記のコードは使用しません。メリットは、JSON解析、または値があるかどうかにかかわらず、そのような状況から得られます。これにより、値がある場合にコードが実行されることが保証されます。


2

テキストのスペースと改行文字のみをチェックします

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
    }
}

これを使用すると、読みやすいコードを記述できます。この2行を比較してください

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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.