请考虑以下事项:
boolean onlyWhen = (count<=number);
while(onlyWhen)
{
System.out.println(count +" ,");
count++;
onlyWhen = (count<=number);
}
是的,功能是有效的。但我在讨论 - 它的工作如何? 如果我理解正确它的工作原理如下: 它取一组字符,然后检查所有测试的字符串字符是否包含set中的符号,如果不是,则返回false。
好的,但倒是什么?如果我删除倒置,结果将是错误的:
extension String {
func isValidEmail() -> Bool {
let characterset = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
print(characterset)
if self.rangeOfCharacter(from: characterset.inverted) != nil {
return false
} else {
return true
}
}
}
var name = "Login"
name.isValidEmail() // print true
var incorretLogin = "Loginъ"
incorretLogin.isValidEmail() // print false
现在我什么都不懂。 如果函数检查字符串字母是否来自字符集,那么为什么倒置设置是否重要? 有人可以解释一下吗?
我在操场上玩了一下:
var name = "Login"
name.isValidEmail() // false
var incorretLogin = "Logъin"
incorretLogin.isValidEmail() // false
打印相同的结果:
let characterset = CharacterSet(charactersIn: "a")
print(characterset)
print(characterset.inverted)
答案 0 :(得分:1)
根据文件
rangeOfCharacter(from:)
查找并返回给定字符集中第一个字符的接收器范围。
接收者是被检查的字符串。如果在字符串中找不到集合中的字符,则返回nil
。
当设置被反转时,它包含所有无效的字符。因此,rangeOfCharacter(from:)
返回第一个无效字符的位置。这就是你的第一种方法有效的原因。
当您删除inverted
时,该调用将返回第一个有效字符的位置。由于"Logъin"
包含有效和无效字符,因此两个调用都会返回false
。如果您在完全由无效字符组成的字符串上调用第二个函数,例如"Логин"
,您会得到true
。
请注意,您可以通过删除if
:
let characterset = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
return self.rangeOfCharacter(from: characterset.inverted) == nil
答案 1 :(得分:1)
inverted
&#34;返回接收者的反向副本。&#34; (见https://developer.apple.com/documentation/foundation/characterset)。
在您的情况下,inverted
表示您在初始值设定项中提供的所有字符(除外)(除字母和数字外的所有字符)。因此,如果电子邮件字符串包含不字母或数字的任何字符,则该方法返回false
。