在Swift中检查空字符串?


165

在目标C中,可以执行以下操作检查字符串:

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

如何在Swift中检测空字符串?


3
您的目标代码是错误的。对于零个字符串,它严重失败。在目标C中,实际上使用的是:if(myString.length){'它的长度为字符串}。这也适用于零字符串。那很简单,很容易阅读。
汤姆·安德森

Answers:


240

现在具有使用以下命令检测空字符串的内置功能.isEmpty

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

Apple发行前文档:“字符串和字符”


1
您还可以使用isEqualToString,如果您要使用NSString初始化var('var emptyString:NSString'):emptyString.isEqualToString(“”)
Sven

1
用户输入空格时此条件失败。
Shanu Singh


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 { ... }
阿尔伯特·博里

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 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
您的答案和例外答案之间有区别吗?
艾哈迈德·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

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通过“没有用”来表示您遇到错误,自动完成问题或其他问题吗?除非我不知道有什么变化,否则它应该可以工作,但是自动完成功能不会总是选择正确的版本。
约翰·蒙哥马利

因为在我尝试使用optionalString?isBlank它时仍会收到编译时错误,因此需要将其解包。
teradyl

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为nil,那么它甚至没有description属性来检查空白)。
约翰·蒙哥马利

9

要同时进行nil检查和长度检查,可以从Swift 2.0和iOS 9开始使用

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

4

如果字符串==“”,isEmpty将按照您的预期进行操作,它将返回true。其他一些答案则指向您有可选字符串的情况。

请使用可选链接

如果字符串不是nil,则将使用isEmpty,否则将不使用。

下面,将不会设置optionalString,因为字符串为nil

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

1
if myString?.startIndex != myString?.endIndex {}

0

关于什么

if let notEmptyString = optionalString where !notEmptyString.isEmpty {
    // do something with emptyString 
    NSLog("Non-empty string is %@", notEmptyString)
} else {
    // empty or nil string
    NSLog("Empty or nil string")
}

0

我可以建议向String或Array添加看起来像这样的小扩展名

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.