一次关于`CharacterSet`校验体验

开始之前,先简单回顾一下Set

  • 集合: 我们最好接触大概是在高一的时候吧,集合有三要素

  • 确定性,集合中的元素是确定的,要么在集合中要么不再,二者必居其一

  • 互异性,集合里相同的元素不允许重复出现,比如{a,a,b,b,c,c}是错误的写法,应该写成{a,b,c}。对应Set应该满足Hashable协议,使每个元素都是不一样的

  • 无序性,集合里的元素的排列不考虑顺序问题,例如{a,b,c}与{a,c,b}表示同一个集合。对应Set应该是一个无序集合

从Set在swift标准库中也可以看出,是一个无序集合(unordered collection)类型,包含一组不重复的值(类似于 只有key的Dictionary,且key也遵循Hashable协议。)所以Set也是一个哈希表

Set作为集合类型。一些集合的基本操作都是有的,下面是关于Set一些简单操作

一次关于`CharacterSet`校验体验_第1张图片
image

当然关于集合的交集(∩),并集(∪)等操作,swift也提供了官方的api,有兴趣的可以看一下

CharacterSet

一切一切的开始

pd告诉我:对用户输入的密码进行验证,必须满足有数字,字母,标点且长度大于6的密码是一个合格的密码。这时候commit按钮被点亮

拿到需求应该都会先想到用正则处理。
当我写到标点的时候
哇!!!
对不起 -
打扰了 打扰了

一次关于`CharacterSet`校验体验_第2张图片
image

被逼无奈,只能尝试其他方法
终于让我找到了CharacterSet
感动感动

介绍

什么是字符集?
苹果告诉我们,字符集是一种无序的独特元素集合——它包含了符合unicode的字符。由于它们是无序的且不包含重复的,字符集通常用于搜索操作,而不是用于存储和访问信息。

func rangeOfCharacter(from aSet: CharacterSet, options mask: String.CompareOptions = default, range aRange: Range? = default) -> Range?

通过这个方法,我们可以找到并返回给定的字符集在给定的选项中,找到的第一个字符的字符串中的范围。

  • 如果找到了,证明存在字符集中的元素
  • 反之,不存在

so !

我们可以生成 数字字符集数字字符集标点字符集
当三者同时满足且长度大于6,则通过密码效验是个合格的密码

let numbers = CharacterSet(charactersIn: "123456789")
let letters = CharacterSet.letters
let punctuations = CharacterSet.punctuationCharacters

let password = "122334. a"
let passwordLength = Int(password.count)
if let conditionA = password.rangeOfCharacter(from: numbers), let conditionB = password.rangeOfCharacter(from: letters),let conditionC = password.rangeOfCharacter(from: punctuations), passwordLength > 6{
    print("符合条件的密码")
}
一次关于`CharacterSet`校验体验_第3张图片
image

这样我们就通过了关于密码的效验过程


笔者是一个刚入门iOSer

这次关于CharacterSet也是学习运用,一定有很多的不足,希望大家不吝赐教!

有任何问题可以留言,或者直接联系QQ:346658618

希望可以相互学习,一起进步!

你可能感兴趣的:(一次关于`CharacterSet`校验体验)