Swift删除扩展字符,如果字符串包含某些字符



我知道标题是复杂的,但本质上是我试图做的

    let gif = UIImage(gifName: (String(format: "%03d", self.animal.speciesId!)))
    self.gifIBO.setGifImage(gif, manager: gifManager)
    gifIBO.contentMode = UIViewContentMode.center

这是我的代码。我有一系列我正在从其中抓住的图像集合,使用格式"%03d" ex:(001,002,010)。但是我有1000多个图像,其中一些图像包含额外的字母。

ex:300-f.gif,231-m.gif

这些图像被跳过了。我当前的解决方案是重命名每个具有扩展字符的图像。当Swift发现填充某些要求的图像时,是否有任何本地方法可以删除这些扩展字符?

例如。如果它找到图像300-f.gif但前三个字符匹配,则需要删除字符串的其余部分并使用该图像而不是跳过它并返回

找不到300.gif

在控制台上。

您可以在捆绑中迭代所有gif,并寻找以 speciesId开头的gif:

let gif = Bundle.main.urls(forResourcesWithExtension: "gif", subdirectory: nil)!
    .first {
        let pattern = String(format: "%03d(-.)?", speciesId)
        return $0.lastPathComponent.range(of: pattern, options: [.regularExpression]) != nil
    }.map {
        UIImage(contentsOfFile: $0.path)!
    }
  • Bundle.main.urls(...)列出了主捆绑包中的所有GIF文件
  • first搜索名称与特定条件匹配的第一个文件。条件是基于您的speciesId的正则模式。该模式将符合001(-.)?之类的内容,这是说话的方式:"字符串001,可选为dash( -)和另一个字母(.表示任何字母)"
  • map将路径变成了您的UIImage

最新更新