Adquira o hábito de escrever juntos! Este é o 15º dia da minha participação no "Nuggets Daily New Plan·April Update Challenge", clique para ver os detalhes do evento .
O mesmo CharacterSet também é uma coleção de armazenamento eficiente de pontos de código Unicode (pontos de código), que geralmente é usado para determinar se um caractere contém caracteres em um subconjunto (como alfanuméricos ou decimalDigits). Ao contrário de IndexSet, CharacterSet não é um tipo de coleção , o nome é gerado ao importar do Objective-C
Atributos | descrever |
---|---|
CharacterSet.alfanuméricos | Uma combinação de letras e números, incluindo maiúsculas e minúsculas, excluindo os pontos decimais |
CharacterSet.maiúsculasLetras | Alfabeto, Capitalização, Categoria Lt |
CharacterSet.decimalDígitos | Números 0-9, sem ponto decimal |
CharacterSet.whitespaces | espaço |
CharacterSet.whitespacesAndNewlines | espaços e novas linhas |
CharacterSet.letters | Todas as letras em inglês, incluindo maiúsculas e minúsculas 65-90 97-122 |
CharacterSet.minúsculasLetras | Letras inglesas minúsculas 97-122 |
CharacterSet.maiúsculasLetras | Letras maiúsculas inglesas 65-90 |
CharacterSet.nonBaseCharacters | caractere não base M* |
CharacterSet.illegalCharacters 不 | Caracteres compatíveis, sem caracteres definidos no padrão Unicode 3.2 |
CharacterSet.punctuationCharacters | P* para pontuação, linhas de conexão, aspas, o que for |
CharacterSet.symbols | símbolos, incluindo tudo S*, operadores, símbolos de moeda, qualquer |
CharacterSet.newlines | Retorna um conjunto de caracteres contendo novas linhas, U+000A ~ U+000D, U+0085, U+2028 e U+2029 |
CharacterSet.symbols | símbolos, incluindo tudo S*, operadores, símbolos de moeda, qualquer |
invertido | o conjunto de caracteres oposto. Por exemplo CharacterSet.whitespaces.inverted significa sem espaços |
// 去掉首尾空格
let example = " abc ".trimmingCharacters(in: CharacterSet.whitespaces)
print(example)
// abc
//验证密码是否只包含数字
let password = "123"
print(password.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil)
// true
//url编码
let url = URL(string: "http://www.api.test.com".addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed)!)
// 自定义
let str2 = "#/%/<>?@"
let custom = CharacterSet(charactersIn: "#").inverted
let result = str2.addingPercentEncoding(withAllowedCharacters: custom) ?? ""
print(result) //输出 %23/%/<>?@
复制代码
- CharacterSet.urlHostAllowed: caracteres de escape são "#%/<>?@^`{|}
- CharacterSet.urlPathAllowed: caracteres de escape são "#%;<>?[]^`{|}
- CharacterSet.urlUserAllowed: caracteres de escape são #%/<>?@^`{|}
- CharacterSet.urlQueryAllowed: caracteres de escape são "#%<>[]^`{|}
- CharacterSet.urlPasswordOs caracteres de escape permitidos são "#%/:<>?@[]^`{|}
CharacterSet.urlHostAllowed contém todos os caracteres que não precisam ser transcodificados, que podem ser verificados com dois códigos:
let unicode = "1".unicodeScalars.flatMap{ $0 }[0]
print(CharacterSet.urlHostAllowed.contains(unicode)) //输出TRUE
复制代码
Usando coleções em encerramentos
extension Sequence where Element: Hashable {
func unique() -> [Element] {
var seen: Set<Element> = []
return filter { element in
if seen.contains(element) {
return false
} else {
seen.insert(element)
return true
}
}
}
}
[1,2,3,12,1,3,4,5,6,4,6].unique() // [1, 2, 3, 12, 4, 5, 6]
复制代码
O método acima nos permite encontrar todos os elementos únicos na sequência e manter sua ordem original pelos elementos que devem satisfazer a restrição Hashable. No fechamento que passamos para filtrar, usamos uma variável externa vista cujo valor podemos acessar e modificar dentro do fechamento