2013-06-21 153 views
0

序言:我正在編寫一些我沒有寫的代碼,而且我幾乎不知道iOS的知識。檢查一個字符串是否與數組中的任何值匹配?

該應用程序具有處理大部分應用程序的webview;內部鏈接加載到網頁視圖中,其他網站的鏈接在Safari中打開。但是,嵌入谷歌地圖也會導致Safari瀏覽器打開。我找到了相關負責人的代碼,我想,它看起來像這樣:

// a bit higher up 
static NSString *const siteURL = @"http://my.example.com" 


if (![request.URL.absoluteString hasPrefix:siteUrl]) 
{ 
    if ([[UIApplication sharedApplication] canOpenURL:request.URL]) 
    { 
     [[UIApplication sharedApplication] openURL:request.URL]; 
    } 
    return NO; 
} 

現在因爲「maps.google.com」不以「my.example.com」它從農場到野生動物園 - 這對我來說很有意義。但是,我試着修改這個:

static NSString *const googleMaps = @"http://maps.google.com" 

if (! ([request.URL.absoluteString hasPrefix:siteUrl] || [request.URL.absoluteString hasPrefix:googleMaps])) 
{ 
    if ([[UIApplication sharedApplication] canOpenURL:request.URL]) 
    { 
     [[UIApplication sharedApplication] openURL:request.URL]; 
    } 
    return NO; 
} 

這也適用。但我需要添加更多網址。我唯一的選擇是不斷添加'或'和字符串常量嗎?或者有沒有辦法制作一個數組,並說「如果它匹配任何這些」?對不起,如果這個問題看起來簡單。

在PHP中我只是做一些像in_array('string', $array)爲我的病情,我想我在尋找如何做到這一點iOS中

+0

唯一字符串的列表,或只是爲了查看它是否存在並將其添加到一個?對不起,我現在正在半讀這個......這兩個都已經有答案了,我會告訴你正確的方向 –

回答

2

一個解決辦法是保持對象的NSSet,是所有字符串你想在你的內部網頁視圖中處理。

NSSet *internalURLSet = [NSSet setWithObjects:@"http://my.example.com", @"http://maps.google.com", nil]; 

使用一個可變集,如果你將被添加到設定一段時間,但你可能會知道你想在公司內部,只要你的應用程序啓動處理哪些URL,這將不會改變。如果您在應用程序運行時添加集合,然後將它們添加到可變集合,因爲它們變得已知。

當您檢查URL時,使用[internalURLSet containsObject:urlToTest],它將匹配您添加到該集合的任何字符串。

檢查設置是非常有效的。向對象添加對象並不那麼簡單,但是當您檢查很多次時,您很可能僅向該設置添加一次URL。

(做indexOfObject:對一個NSArray的效率是非常低...)

-1

你可以通過創建URL的一個NSArray,然後使用indexOfObjectPassingTest:方法來測試你對每一個陣列中的URL做到這一點。它會是這樣的:

NSArray *testURLs = @[ @"http://maps.google.com", @"http://www.example.com" ]; 

NSString *urlString = request.URL.absoluteString; 
BOOL urlMatchedTest = NO; 
for (NSString *testURL in testURLs) { 
    if [urlString hasPrefix:testURL]) { 
     urlMatchedTest = YES; 
    } 
} 
if (urlMatchedTest){ 
    // the url contains one of the test URLS 
} else { 
    // it didn't match any of the test URLs 
} 
+0

這是NSSet的用途。 – Idles

0

你可以嘗試使用謂詞。下面是用一個例子教程鏈接(年紀大了,但仍應工作):

http://arstechnica.com/apple/2009/04/cocoa-dev-the-joy-of-nspredicates-and-matching-strings/

我做了很多.NET開發的太和永遠懷念LINQ當我回去的iOS。謂詞可以幫助更多的代碼行,但是可以進行各種搜索。

+1

答案與代碼=很好的答案。只有鏈接的答案=鏈接中斷時的錯誤答案。 http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers – iwasrobbed

+0

但是,尋求答案而不是依靠論壇的鼓勵是+1。 ..對不起,2個邪惡和一個學生不會搜索谷歌,因爲他「太善於溝通」被理解影響這個評論 –

0

我看到你的問題。在IOS中,沒有函數in_array('string',$ array)來檢查數組中是否包含字符串。 我有一個建議:你創建一個包含所有URL的數組。並執行'for'或'while'循環來獲取數組的值來檢查它。如果相同,則調用函數OpenUrl。

相關問題