Swift中如何判断字符是否为空串

一、前言

开发的过程中经常要判断字符串是否为空,包括包含多个空格的字符串,如" ",这个字符串在程序中也要判别为空串。那么如何判断字符串为空呢

二、系统提供的方法

可以用系统原生的方法判断

  • 通过字符串自带的属性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判断,如果发现有一个字符返回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处理后变为text = "",再调用isEmpty,判定字符串为空

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容