Swift中如何判斷字符是否為空串

一、前言

開發(fā)的過程中經常要判斷字符串是否為空,包括包含多個空格的字符串,如" ",這個字符串在程序中也要判別為空串。那么如何判斷字符串為空呢

二、系統(tǒng)提供的方法

可以用系統(tǒng)原生的方法判斷

  • 通過字符串自帶的屬性isEmpty判斷是否為空:

    A Boolean value indicating whether a string has no characters

var text = "hello!"
//如果有字符返回false,如果沒有字符返回true.但是如果字符串是空格或換行符,則認為存在字符返回false
text.isEmpty 
  • 通過獲取字符串的字符數count判斷是否為空:
var text = "hello!"
//如果字符數大于0,則認為字符串不為空,如果字符數等于0,則認為字符串為空。但是如果字符串是空格或換行符,則 count會大于0,字符串不為空
text.count == 0 

可見以上兩種方法無法處理text = " "text = "\n"這些形式的字符串,也就是說Swift認為" "不是空字串!

所以我們可以通過對String進行擴展其屬性來實現,看下邊。

三、對String的擴展方法

先來個測試代碼

class ViewController: UIViewController {
    //text的值可以修改為:"","  "," 哈哈","\n"進行測試
    var text = "哈哈"
    override func viewDidLoad() {
        super.viewDidLoad()
        print("isEmpty:\(text.isEmpty)")
        print("count:\(text.count == 0)")
        print("isBlank:\(text.isBlank)")
        print("isReBlank:\(text.isReBlank)")
    }
}
extension String{
    /// 通過高階函數allSatisfy,判斷字符串是否為空串
    var isBlank:Bool{
        /// 字符串中的所有字符都符合block中的條件,則返回true
        let _blank = self.allSatisfy{
            let _blank = $0.isWhitespace
            print("字符:\($0) \(_blank)")
            return _blank
        }
        return _blank
    }
    ///通過裁剪字符串中的空格和換行符,將得到的結過進行isEmpty
    var isReBlank:Bool{
        let str = self.trimmingCharacters(in: .whitespacesAndNewlines)
        return str.isEmpty
    }
}

  • 使用allSatisfy和isWhitespace進行擴展:

    1. allSatisfy是swift中提供的階函數,表示所有元素是否滿足符合設定的條件,并返回bool值。

    2. isWhitespace是Character的一個屬性,用戶判定字符是否是空。

    A Boolean value indicating whether this character represents whitespace, including newlines.

    For example, the following characters all represent whitespace:

    //以下字符均表示空白

    "\t" (U+0009 CHARACTER TABULATION)

    " " (U+0020 SPACE)

    U+2029 PARAGRAPH SEPARATOR

    U+3000 IDEOGRAPHIC SPACE

    1. 代碼思想:

    通過allSatisfy遍歷字符串中的每個字符,將每個字符做isWhitespace判斷,如果發(fā)現有一個字符返回false,則結束遍歷,擴展屬性返回當前字符串不為空字符串的判定。

    /// 通過高階函數allSatisfy,判斷字符串是否為空串
        var isBlank:Bool{
            /// 字符串中的所有字符都符合block中的條件,則返回true
            let _blank = self.allSatisfy{
                let _blank = $0.isWhitespace
                print("字符:\($0) \(_blank)")
                return _blank
            }
            return _blank
        }
    

    eg. 如果text = " ",text.isBlank的結果為true

  • 使用trimmingCharacters進行擴展:

    1. trimmingCharacters:修剪字符

      用于截取字符串,根據CharacterSet的配置處理截取字符串,這里用到了whitespacesAndNewlines,表示將字符串中的空格和換行符去除。

    2. characterSet:字符集

      字符集,也就是一堆字符的集合,就是說把我們平常見到的單個字符按照一定的條件進行了分類

      例如

      CharacterSet.whitespacesAndNewlines--空格和換行符
      CharacterSet.letters--所有英文字母的集合
      
    3. 代碼思想:

      將需要校驗的字符串中的空格或換行符刪除,獲得新的字符串,再片段新字符串的isEmpty是否為空,進而校驗完成原始字符串

        ///通過裁剪字符串中的空格和換行符,將得到的結過進行isEmpty
          var isReBlank:Bool{
              let str = self.trimmingCharacters(in: .whitespacesAndNewlines)
              return str.isEmpty
          }
      

      eg. 如果text = " ",經過trimmingCharacters處理后變?yōu)閠ext = "",再調用isEmpty,判定字符串為空

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容