【问题标题】:Check empty string in Swift?在 Swift 中检查空字符串?
【发布时间】:2014-07-30 18:05:09
【问题描述】:

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

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

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

【问题讨论】:

  • 您的目标代码错误。它对于 nil 字符串非常失败。在目标 C 中,实际使用: if (myString.length) { 'its a string with length} 。这也适用于 nil 字符串。这简单易读。

标签: swift


【解决方案1】:

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

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

Apple 预发布文档:"Strings and Characters"

【讨论】:

【解决方案2】:

这是我检查字符串是否为空白的方法。 “空白”是指一个为空或仅包含空格/换行符的字符串。

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

使用方法:

MyString.blank(" ") // true

【讨论】:

【解决方案3】:

我正在完全重写我的答案 (again)。这次是因为我已经成为guard statementearly return的粉丝了。它使代码更简洁。

非可选字符串

检查零长度。

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 语句后,您可以安全地使用您展开的非空字符串。

【讨论】:

    【解决方案4】:

    检查字符串是 nil 还是空的简洁方法是:

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

    【讨论】:

    • 这很漂亮,但是您将如何使用展开的值?强制解包?
    • @halfnibble 您可以选择(隐式或强制展开),也可以:if let myString = myString where !myString.isEmpty { ... }
    【解决方案5】:

    同时进行 nil 检查和长度 您可以使用 Swift 2.0 和 iOS 9 以上版本

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

    【讨论】:

      【解决方案6】:

      对于可选字符串怎么样:

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

      【讨论】:

        【解决方案7】:

        怎么样

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

        【讨论】:

          【解决方案8】:

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

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

          使用

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

          【讨论】:

            【解决方案9】:

            isEmpty 会按照你的想法做,如果 string == "",它会返回 true。 其他一些答案指向您有一个可选字符串的情况。

            请使用Optional Chaining!!!!

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

            下面,由于字符串为 nil,因此不会设置 optionalString

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

            显然你不会使用上面的代码。收益来自 JSON 解析或其他有值或没有值的情况。这保证了如果有值就会运行代码。

            【讨论】:

              【解决方案10】:

              您还可以使用可选扩展名,这样您就不必担心解包或使用== 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
                      }
                  }
              }
              

              注意:在可选项上调用它时,请确保不要使用?,否则它仍然需要解包。

              【讨论】:

              • 对此感到很兴奋,但它不起作用:(我在使用 Swift 3.0
              • @teradyl “没有工作”是指您遇到错误、自动完成问题或其他问题吗?它应该可以工作,除非发生了我不知道的更改,但自动完成不会总是选择正确的版本。
              • 当我尝试使用 optionalString?isBlank 时仍然会遇到编译时错误,它需要被解包。
              • 对我来说,这不适用于currentIncident.priority?.description.isBlank。说:Value of optional type 'Bool?' not unwrapped; did you mean to use '!' or '?'?。我必须做(currentIncident.priority?.description ?? "").isBlank 这使得扩展毫无意义。斯威夫特 4.1。
              • @CarstenHagemann 那是因为priority 是可选的。如果只是description 是可选的,它会起作用,但你不能解决像这样可选的父对象(因为如果priority 为零,那么它甚至没有description 属性来检查空白-首先)。
              【解决方案11】:

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

              【讨论】:

              • 你的答案和被排除的有区别吗?
              • 如果用户只是输入一堆空格,这不起作用。
              • 在排版中,空格被视为一个字符,因此它不是空的。如果您愿意,请将条件更改为 'lang.trimmingCharacters(in: .whitespaces).isEmpty'
              【解决方案12】:
              if myString?.startIndex != myString?.endIndex {}
              

              【讨论】:

                【解决方案13】:

                我可以建议向字符串或数组添加小扩展,看起来像

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

                有了它,您可以编写更易于阅读的代码。 比较这两行

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

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

                很容易错过在拳头的开头。

                【讨论】:

                  【解决方案14】:

                  你可以使用这个扩展:

                  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)
                  

                  【讨论】:

                    【解决方案15】:
                    public extension Swift.Optional {
                        
                        func nonEmptyValue<T>(fallback: T) -> T {
                            
                            if let stringValue = self as? String, stringValue.isEmpty {
                                return fallback
                            }
                            
                            if let value = self as? T {
                                return value
                            } else {
                                return fallback
                            }
                        }
                    }
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-08-14
                      • 2013-04-29
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-04-01
                      相关资源
                      最近更新 更多