将 Swift 中的 NSURL 方案与字符串进行比较
Compare NSURL scheme in Swift with a String
我想知道这是否可以在 swift 中实现,它的实现方式是什么?
我只是想能比较一下?我的 url 的方案到我想要的任何字符串。这就是我在 objc 中的做法。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if ([request.URL.scheme isEqual: @"http"] || [request.URL.scheme isEqual:@"https"]) {
return NO;
}
return YES;
}
在Swift中使用==
,而不是在Objective-C
中使用isEqual:
或isEqualToString:
if (request.URL.scheme == "http" || request.URL.scheme == "https") {
真的Swifty:
if let scheme = request.URL.scheme {
switch scheme {
case "http", "https":
return true
default:
return false
}
}
本质上,安全地从 URL 中提取方案(毕竟可能是零)然后打开它(你可以在 Swift 但不是 Objective-C 中使用)使用复合案例陈述。
如果来源 URL 没有小写方案(即 hTTp://…
),则其他 2 个答案将失败。
此外,其他 2 个答案无法解开选项 (request.URL?.scheme?
)。
还有一个选项:
if let lowercaseScheme = request.URL?.scheme?.lowercaseString {
if lowercaseScheme.rangeOfString("http") != nil {
println("It's a match!")
}
}
或者,在 Swift 1.2 (Xcode 6.3) 中:
if let lowercaseScheme = request.URL?.scheme?.lowercaseString where lowercaseScheme.rangeOfString("http") != nil {
println("It's a match!")
}
或者,如果您实际上不需要知道块中的方案:
if request.URL?.scheme?.lowercaseString.rangeOfString("http") != nil {
println("It's a match!")
}
这将匹配 http
、https
和 hTTpS
。它还将匹配 lolHTTProfl
。如果这在您的用例中不合适,请使用上述答案的方法(==
运算符),但可以使用可选的展开和 lowercaseString
.
我想知道这是否可以在 swift 中实现,它的实现方式是什么?
我只是想能比较一下?我的 url 的方案到我想要的任何字符串。这就是我在 objc 中的做法。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if ([request.URL.scheme isEqual: @"http"] || [request.URL.scheme isEqual:@"https"]) {
return NO;
}
return YES;
}
在Swift中使用==
,而不是在Objective-C
isEqual:
或isEqualToString:
if (request.URL.scheme == "http" || request.URL.scheme == "https") {
真的Swifty:
if let scheme = request.URL.scheme {
switch scheme {
case "http", "https":
return true
default:
return false
}
}
本质上,安全地从 URL 中提取方案(毕竟可能是零)然后打开它(你可以在 Swift 但不是 Objective-C 中使用)使用复合案例陈述。
如果来源 URL 没有小写方案(即 hTTp://…
),则其他 2 个答案将失败。
此外,其他 2 个答案无法解开选项 (request.URL?.scheme?
)。
还有一个选项:
if let lowercaseScheme = request.URL?.scheme?.lowercaseString {
if lowercaseScheme.rangeOfString("http") != nil {
println("It's a match!")
}
}
或者,在 Swift 1.2 (Xcode 6.3) 中:
if let lowercaseScheme = request.URL?.scheme?.lowercaseString where lowercaseScheme.rangeOfString("http") != nil {
println("It's a match!")
}
或者,如果您实际上不需要知道块中的方案:
if request.URL?.scheme?.lowercaseString.rangeOfString("http") != nil {
println("It's a match!")
}
这将匹配 http
、https
和 hTTpS
。它还将匹配 lolHTTProfl
。如果这在您的用例中不合适,请使用上述答案的方法(==
运算符),但可以使用可选的展开和 lowercaseString
.