通过字符串验证了解功能

时间:2018-01-28 11:51:19

标签: ios swift

请考虑以下事项:

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)

2 个答案:

答案 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

游乐场示例: playground example