2015-02-06 68 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

相關問題