将 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!")
}

这将匹配 httphttpshTTpS。它还将匹配 lolHTTProfl。如果这在您的用例中不合适,请使用上述答案的方法(== 运算符),但可以使用可选的展开和 lowercaseString.