iphone - 检查字符串是否与数组中的任何值匹配?

标签 iphone ios

序言:我正在使用一些我没有编写的代码,而且我对 iOS 几乎一无所知。

应用程序有一个 webview 来处理应用程序的大部分内容;内部链接在 webview 中加载,其他网站的链接在 Safari 中打开,这是预期的。然而,嵌入谷歌地图也会导致Safari打开。我找到了相关的 Controller 代码,我想,它看起来像这样:

// 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”开头,所以它会转移到 safari - 这对我来说很有意义。但是,我尝试修改它:

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;
}

这也有效。但我需要添加更多网址。我唯一的选择是继续添加“or”和字符串常量吗?或者有没有办法制作一个数组并说“如果它与其中任何一个匹配”?抱歉,如果这个问题看起来过于简单。

在 PHP 中,我只会做类似 in_array('string', $array) 作为我的条件,我想我正在寻找如何在 iOS 中执行此操作

最佳答案

一种解决方案是维护一个 NSSet 对象,其中包含您想要在内部 Web View 中处理的所有字符串。

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

如果您要随着时间的推移向集合中添加内容,请使用可变集合,但您可能会在应用程序启动后立即知道要在内部处理哪些 URL,并且这一点不会改变。如果您在应用程序运行时添加集合,那么当它们变得已知时将它们添加到可变集合中。

当您检查 URL 时,请使用 [internalURLSet containsObject:urlToTest],它将匹配您添加到集合中的任何字符串。

对照集合进行检查非常有效。将对象添加到集合中的情况较少,但您很可能在多次检查时只将 URL 添加到集合中一次。

(对 NSArray 执行 indexOfObject: 效率非常低...)

关于iphone - 检查字符串是否与数组中的任何值匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17225905/

相关文章:

ios - Xcode - 关闭调试

iphone - 使用通用应用程序启动多个目标的图像

iphone - 在 iPhone 中隐藏右侧导航栏按钮项

ios - 类 AppDelegate : UIResponder, UIApplicationDelegate { SWIFT 中的 SIGABIRT 错误

ios - Titanium Appcelerator 无法在 iphone 设备上运行应用程序

ios - stringWithContentsOfFile 和 initWithContentsOfFile 在多次运行后返回 null

ios - Xcode 3.2.5 的“项目信息/构建”选项卡中缺少 GCC 4.2 选项

ios - sqlite3 在 iOS 9.0 设备中崩溃

ios - 如何在 Swift 中更改 UITableView 单元格文本宽度

ios - 正确屏蔽 UIView (UICollectionView)