2015-02-06 70 views
1

我想知道这是否可以在swift中执行,以及它将如何执行?将Swift中的NSURL方案与字符串进行比较

我只是想能够比较吗?我的网址的计划,我想要什么字符串..这是我一直在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; 
} 
+0

与论坛网站不同,我们不使用“谢谢”或“任何帮助表示赞赏”,或在[so]上签名。请参阅“[应该'嗨','谢谢',标语和致敬从帖子中删除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be ),这是“预先感谢”,而不是“感谢先进” – 2015-02-11 06:44:42

+0

@JohnSaunders我did not知道.. – NorthBlast 2015-02-12 14:37:31

回答

1

使用==斯威夫特,而不是isEqual:isEqualToString:在Objective-C

if (request.URL.scheme == "http" || request.URL.scheme == "https") { 
+0

这不会编译。 – 2015-02-11 07:16:09

+0

这帮助我,因为我意识到,在斯威夫特我可以使用运算符'=='比较'NSURL',而在Objective-C中,我必须使用' - (BOOL)isEqual:' – 2015-08-25 02:58:20

0

真的SWIFTY:

if let scheme = request.URL.scheme { 
    switch scheme { 
    case "http", "https": 
     return true 
    default: 
     return false 
    } 
} 

从本质上讲,安全地从URL拉动方案(可能是零毕竟),然后使用复合大小写语句打开它(您可以在Swift中执行,但不能使用Objective-C)。

+0

'这个方法来进行比较。 – 2015-02-11 07:12:23

1

如果源URL没有小写格式(即hTTp://…),则其他2个答案将失败。

此外,其他2个答案未能解开可选项(request.URL?.scheme?)。

这里的另一种选择:

if let lowercaseScheme = request.URL?.scheme?.lowercaseString { 
    if lowercaseScheme.rangeOfString("http") != nil { 
     println("It's a match!") 
    } 
} 

或者,在雨燕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,httpshTTpS。它也将匹配lolHTTProfl。如果在您的使用案例中不能满足要求,请使用上述答案的方法(==操作员),但使用可选的展开和lowercaseString

相关问题