2017-05-13 31 views
0

我已经制作了一个字符串扩展来验证Swift 3语言中的表单。 的代码如下:在swift中使用扩展名时使用未解析的标识符3

import UIKit 
extension String { 
    // Validating Email ID 
    func isValidEmail(testStr:String) -> Bool { 
     let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,}" 
     let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx) 
     return emailTest.evaluate(with: testStr) 
    } 
    // Validating the User name 
    func isValidUserName(testStr:String) -> Bool { 
     let RegEx = "\\A\\w{7,18}\\z" 
     let Test = NSPredicate(format:"SELF MATCHES %@", RegEx) 
     return Test.evaluate(with: testStr) 
    } 
    // Validating the phone number 
    var isPhoneNumber: Bool { 
     do { 
      let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.phoneNumber.rawValue) 
      let matches = detector.matches(in: self, options: [], range: NSMakeRange(0, self.characters.count)) 
      if let res = matches.first { 
       return res.resultType == .phoneNumber && res.range.location == 0 && res.range.length == self.characters.count 
      } else { 
       return false 
      } 
     } catch { 
      return false 
     } 
    } 
    // validating the password 
    /* 
    Use the function of Swift 3.0. 
     1. 8 characters length 
     2. alphabet 
     3. special character 
     regex Syntax Explanation : 
     (?=.[a-z]) for Character. 
     (?=.[[email protected]$#!%?&]) for special character. 
     {8,} for length which you want to prefer. 
    */ 
    func isPasswordValid(_ password : String) -> Bool{ 
     let passwordTest = NSPredicate(format: "SELF MATCHES %@", "^(?=.*[a-z])(?=.*[[email protected]$#!%*?&])[A-Za-z\\[email protected]$#!%*?&]{8,}") 
     return passwordTest.evaluate(with: password) 
    } 
    // validating the password and confirm password are same........................ 
    func isPasswordSame(password: String , confirmPassword : String) -> Bool { 
     if password == confirmPassword{ 
      return true 
     } else { 
      return false 
     } 
    } 
    // validating Blank Text........................ 
    var isBlank:Bool { 
     return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).isEmpty 
    } 
} 

但是,当我试图通过代码使用在其他视图控制器此扩展类:

if isValidEmail("[email protected]"){ 
      print("Validate EmailID") 
     } 
     else{ 
      print("invalide EmailID") 
     } 

我收到错误: Error Shown

+3

是想你想通过这门课FUNC方法,调用'String.isValidEmail(和“myString” )',或者仍然是实例''myString“.isValidEmail()',但是在这两种情况下,您都可能想要修改方法的声明。通常情况下,如果您不在实例方法或其某个属性中使用'self',则可能有错误(忘记了某些内容,设计错误等) – Larme

+1

您需要修复扩展因为您不需要在扩展类型时传递任何参数。 –

+0

检查此问题http://stackoverflow.com/questions/31954416/regex-for-alphanumeric-without-special-characters-swift-ios/31954533#31954533它可能会帮助您了解 –

回答

3

isValidEmail不是一个松散的功能。您已将其定义为String上的实例函数。你需要说

"someString".isValidEmail(testStr:"someOtherString") 

这是没有道理的,但这就是你如何配置它。如果你这样写,你的代码将会被编译(尽管它会是非常愚蠢的代码)。

+0

如何让它解决我的扩展? –

+0

@JessicaRoot。您需要了解Instance和Class以及相关主题Instance Methods vs Class Methods之间的区别。这是一个基本的面向对象编程主题。对此,SO应该有疑问。一旦你这样做,在Swift中应用它。 – Larme

+0

我将它定义为'func isValidEmail() - > Bool',在'testStr'中使用'self'。 – matt

0

你的定义只是更改为类似

extension String { 
// Validating Email ID 
func isValidEmail() -> Bool { 
    self.validate... 
} 

,然后用它在你的代码

@someString".isValidEmail() 
相关问题