调用可以抛出,但它没有标记为'try'并且没有处理错误:NSRegularExpression
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用可以抛出,但它没有标记为'try'并且没有处理错误:NSRegularExpression相关的知识,希望对你有一定的参考价值。
我已在String Extension中编写此函数,但无法找出错误。
func isEmail() -> Bool {
let regex = NSRegularExpression(pattern: "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$", options: [.CaseInsensitive])
return regex.firstMatchInString(self, options: nil, range: NSMakeRange(0, characters.count)) != nil
}
错误是:
调用可以抛出,但它没有标记为'try',并且没有处理错误
如果模式无效,NSRegularExpression(pattern:)
会抛出错误。在您的情况下,模式是固定的,因此无效模式将是编程错误。
这是使用try!
的“强制尝试”表达式的用例:
extension String {
func isEmail() -> Bool {
let regex = try! NSRegularExpression(pattern: "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$",
options: [.CaseInsensitive])
return regex.firstMatchInString(self, options:[],
range: NSMakeRange(0, utf16.count)) != nil
}
}
try!
禁用错误传播,以便该方法不会抛出错误(调用者必须捕获)。如果模式无效,它将以运行时异常中止,这有助于尽早发现编程错误。
另请注意,NSRange()
计算NSString
的长度,即UTF-16代码点的数量,因此characters.count
应该是utf16.count
,否则它可能会崩溃,例如与表情符号字符。
那是因为初始化程序现在可以抛出异常,所以你需要try
来调用它并准备好catch
异常。您可以通过在初始化程序之前添加try
并使用throws
注释方法来完成此操作。
extension String {
func isEmail() throws -> Bool {
let regex = try NSRegularExpression(pattern: "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$", options: [.CaseInsensitive])
return regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, characters.count)) != nil
}
}
然后,当你想调用方法时,从do
块中执行它并捕获出来的错误。
do {
try "person@email.com".isEmail()
} catch {
print(error)
}
注意:我还更新了你的regex.firstMatchInString
调用,以反映options
参数不能再取零值的事实。
如果你不喜欢try catch:
extension String {
func matchPattern(patStr:String)->Bool {
var isMatch:Bool = false
do {
let regex = try NSRegularExpression(pattern: patStr, options: [.CaseInsensitive])
let result = regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, characters.count))
if (result != nil)
{
isMatch = true
}
}
catch {
isMatch = false
}
return isMatch
}
}
check string是正确的电子邮件格式:
let emailInput:String = "checkthis@gmail.com"
if (emailInput.matchPattern("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$"))
{
print("this is e-mail!")
}
您可以使用string.rangeOfString,并指定.RegularExpressionSearch选项。这很简单。
func isEmail(email: String) -> Bool {
return email.rangeOfString("^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$", options: .RegularExpressionSearch) != nil
}
以上是关于调用可以抛出,但它没有标记为'try'并且没有处理错误:NSRegularExpression的主要内容,如果未能解决你的问题,请参考以下文章
Swift 2.1 - 调用可以抛出,但它没有用'try'标记并且错误没有被处理
Swift 2:调用可以抛出,但它没有用'try'标记并且错误没有被处理
IOS:调用可以抛出,但没有标记'try'并且错误未处理[重复]
Swift 2.2 HealthKit - 调用可以抛出,但它没有标有“尝试”并且错误未处理