检查Swift中的空字符串?

检查Swift中的空字符串?,swift,Swift,在目标C中,可以执行以下操作来检查字符串: if([myString IsequalString:@”“){ NSLog(@“myString为空!”); }否则{ NSLog(@“myString不是空的,它是:%@”,myString); } 如何在Swift中检测空字符串?现在内置了使用检测空字符串的功能。isEmpty: if emptyString.isEmpty { print("Nothing to see here") } Apple预发布文档:。以下是我检查字符串是

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

if([myString IsequalString:@”“){
NSLog(@“myString为空!”);
}否则{
NSLog(@“myString不是空的,它是:%@”,myString);
}

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

现在内置了使用
检测空字符串的功能。isEmpty

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

Apple预发布文档:。

以下是我检查字符串是否为空的方法。“blank”指的是空字符串或仅包含空格/换行符的字符串

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

MyString.blank(" ") // true

我正在完全重写我的答案()。这一次是因为我已经成为了和的粉丝。这使得代码更加简洁

非可选字符串 检查长度是否为零

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)
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)
如果
If
语句通过,则可以安全地使用该字符串,因为它不是空的。如果它是空的,那么函数将提前返回,并且在它之后什么都不重要

可选字符串 检查长度是否为零或零

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)
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
语句后,可以安全地使用未包装的非空字符串。

检查字符串是否为零或空的简明方法是:

var myString: String? = nil

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

同时进行零检查和长度检查 您可以使用Swift 2.0和iOS 9

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

对于可选字符串,如何:

if let string = string where !string.isEmpty
{
    print(string)
}
那怎么办

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

仅检查文本中的空格和换行符

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

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

isEmpty将按照您认为的方式执行,如果string==“”,它将返回true。 其他一些答案指向一种情况,即您有一个可选字符串

请使用

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

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

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

显然,您不会使用上述代码。收益来自JSON解析或其他类似情况,即您是否有值。这保证了如果有值,代码将运行。

您也可以使用可选扩展名,这样您就不必担心展开或使用
==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
        }
    }
}
注意:当在可选上调用此选项时,请确保不要使用
,否则它仍需要展开。

在Xcode 11.3 swift 5.2及更高版本中 使用

范例

let lang = "Swift 5"

if lang.isEmpty {
   print("Empty string")
}
如果要忽略空白

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

我建议在字符串或数组中添加小的扩展名,如下所示

extension Collection {
    public var isNotEmpty: Bool {
        return !self.isEmpty
    }
}
使用它,您可以编写更易于阅读的代码。 比较这两行

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


很容易错过在第一行的开头签名

您可以使用此扩展:

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)
公共分机Swift。可选{
func非空值(回退:T)->T{
如果让stringValue=self as?String,则stringValue.isEmpty{
返回回退
}
如果let值=自身为?T{
返回值
}否则{
返回回退
}
}
}

您还可以使用isEqualToString,如果您使用NSString('var-emptyString:NSString'):emptyString.isEqualToString(“”)初始化var,这会很方便。当用户输入空格时,此条件将失败。更新:此处为isEmpty:并作为扩展。。。作为一个补充,您可能想考虑使用WealSePeaEngEngEngEngStices而不是仅使用空白。谢谢@ FWELELSTA,忽略新行也是非常有用的。这很漂亮,但是如何使用未封装的值呢?强制展开?@halfnibble您可以执行(隐式或强制展开)或:
如果让myString=myString where!myString.isEmpty{…}
对此感到很兴奋,但没有成功:(我在Swift 3上。0@teradyl“没用,”你是说你遇到了错误、自动完成问题还是其他问题?除非我不知道发生了什么更改,否则它应该可以工作,但自动完成不会总是选择正确的版本。就像在中一样,当我尝试使用
optionalString时,我仍然会遇到编译时错误?它是空白的,需要打开。对我来说,这不是使用
currentIncident.priority?.description.isBlank
。说明:
可选类型“Bool”的值未展开;您是想使用“!”还是“?”?
。我必须执行
(currentIncident.priority?.description??).isBlank
使扩展变得毫无意义。Swift 4.1。@CarstenHagemann这是因为
优先级
是可选的。如果只是
说明
是可选的,它会起作用,但不能像这样处理可选的父对象(因为如果
priority
为零,那么它甚至没有
description
属性来首先检查空白)。您的答案与例外答案之间是否存在差异?如果用户只输入一组空格,则此操作无效。在排版中,空格被视为字符,因此它不是空的。如果需要,请将条件更改为“lang.trimmingCharacters(In:.whitespaces).isEmpty'您的目标代码是错误的。它对于nil字符串非常失败。在目标C中,实际使用:if(myString.length){‘its a string with length}。这也适用于nil字符串。这很简单,也很容易阅读。
let isMyStringEmptyOrNil = String.isNilOrEmpty(string: myString)