检查字符串是否为 nil 或空字符串。

166

在Swift中有没有一种方法可以检查字符串是否为 nil ""? 在Rails中,我可以使用 blank()进行检查。

我目前有这个,但似乎过于复杂:

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

1
@sutra和@imanou-petit的答案更好。 - Míng
24个回答

4

Swift 3 中检查空字符串的最佳方法

if !string.isEmpty{

// do stuff

}

2
你应该像这样做:
if !(string?.isEmpty ?? true) { // 不是 nil 也不是空字符串 } Nil 合并运算符检查可选项是否为非 nil。如果它不是 nil,则检查其属性,例如在此示例中检查 isEmpty。因为该可选项可能是 nil,所以你提供了一个默认值,当可选项为 nil 时将使用该默认值。

2

Swift 3解决方案 使用可选的解包值并检查布尔值。

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

2

根据这篇Medium文章,稍作修改适用于Swift 5,我得到了下面这段代码。

if let stringA, !stringA.isEmpty {
    ...blah blah
}

虽然我理解创建扩展的好处,但我认为对于只需要一个小组件/包的人可能会有所帮助。


1
如果您预计会经常这样做,可以创建自己的自定义函数。
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")
}

1

Swift 3 这个方法很好地检查字符串是否为空。因为当字符串中有空格时,isEmpty会返回true。

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

Swift 5.6 - Xcode 13

extension Optional where Wrapped: Collection {
  var isEmptyOrNil: Bool {
    guard let self = self else { return true }
    return self.isEmpty
  }
}

使用方法:

var name: String?

if name.isEmptyOrNil { 
  ///true
}

name = "John Peter"

guard !name.isEmptyOrNil else { return } 
/// Name is not empty

2
你也可以简单地执行 self?.isEmpty ?? true; - Ayxan Haqverdili

1
创建一个 String 类的扩展:
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

请注意,如果字符串包含一个或多个空格,则此函数将返回TRUE。要将空字符串视为“空”,请使用...
return string!.trimmingCharacters(in: CharacterSet.whitespaces).isEmpty

请使用 Foundation,而不是其他替代品。

用法如下...

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

1
这是一个适用于所有符合 Collection 协议的类型的通用解决方案,其中包括 String
extension Optional where Wrapped: Collection {
    var isNilOrEmpty: Bool {
        self?.isEmpty ?? true
    }
}

1
使用isEmpty
"Hello".isEmpty  // false
"".isEmpty       // true

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

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

使用可选字符串
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/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接