Swift:如何从 UIImage 数组中提取图像文件名

Posted

技术标签:

【中文标题】Swift:如何从 UIImage 数组中提取图像文件名【英文标题】:Swift: How to extract image filename from an array of UIImage 【发布时间】:2015-03-18 03:21:55 【问题描述】:

如果我有这样的 UIImage 数组:

newImageArray = [UIImage(named:"Red.png")!,
        UIImage(named:"Green.png")!,
        UIImage(named:"Blue.png")!, UIImage(named:"Yellow.png")!]

以后如何提取或确定某个索引的图像的文件名?例如:

println("The first image is \(newImageArray[0])")

它不是返回一个可读的文件名,而是返回:

The first image is <UIImage: 0x7fe211d2b1a0>

我可以将此输出转换为可读文本,还是有其他方法从 UIImage 数组中提取文件名?

【问题讨论】:

也许你应该记录下你用来创建图像的名称。 看起来这可能是要走的路。感谢您的建议。 【参考方案1】:

我环顾四周,因为过去这对我来说也是一个问题。 UIImage 不存储图像的文件名。我为解决这个问题所做的不是使用图像数组,而是使用字典,其中键作为文件名,值作为图像。在我的 for 循环中,我将每个项目的键和值提取到一个元组中并处理它们。

我不再有代码,但作为我在下面看到的内容的快速模拟,(我希望这符合您的要求,因为我知道每个应用程序都是不同的)

var imageDictionary = ["image1.png": UIImage(named: "image1.png"),
     "image2.png": UIImage(named: "image2.png")]

然后for循环将如下所示:

for (key, value) in imageDictionary 
    println(key) // Deal with Key
    println(value) // Deal with Value

...正如我所说,这对我和我需要它的场景有用,我希望你也可以使用它!

祝你好运!

【讨论】:

这将是一个非常巧妙的方法。那么检查索引是否是特定文件名(键)的语法是什么? var index = imageDictionary.indexForKey("Key") 没有问题,swift字典有各种方法。希望有一个适合。【参考方案2】:

创建UIImage 的实例后,所有对该名称的引用都将丢失。例如,当您从文件中制作图像时,您会执行以下操作:

var image: UIImage = UIImage(named: "image.png")

完成后,将不再引用文件名。所有数据都存储在UIImage 实例中,无论它来自何处。正如上面的 cmets 所说,如果必须这样做,您将需要设计一种存储名称的方法。

【讨论】:

感谢您对此的确认。在创建数组之前,我必须做一些额外的编码。【参考方案3】:

我的方法是从一组名称开始(因为您不能轻易地从图像中返回名称):

let imageNames = [ "Red.png", "Green.png", "Blue.png", "Yellow.png"]

然后您可以使用以下方法创建图像数组:

let images = imageNames.map  UIImage(named: $0) 

【讨论】:

你忘记解开 UIImage(named:$0) 返回的可选项! 实际上,我没有忘记,这是一个有意识的选择 :) 无论哪种方式都有效,但我真的不喜欢硬解包选项,这可以让您以更加用户友好的方式处理它方式。【参考方案4】:

这是一个非常棘手的问题。我终于设法让它在表视图控制器中工作。 (斯威夫特 2.1,Xcode 7)

我的图像名称如下所示,位于带有 .png 扩展名的“图标”数组中。 我为图像名称创建了一个数组。

        var icons = ["BirthdaysImage", "AppointmentsImage", "GroceriesImage","MiscellaneousImage"]

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
            let cell = tableView.dequeueReusableCellWithIdentifier("iconsReuseIdentifier", forIndexPath: indexPath)

   //image display
            iconName = icons[indexPath.row]
            cell.imageView?.image = UIImage(named: iconName)

            return cell
        

     override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

   //find out which IMAGE got selected
            var imageSelected = icons[indexPath.row]
            print(imageSelected)

        

【讨论】:

以上是关于Swift:如何从 UIImage 数组中提取图像文件名的主要内容,如果未能解决你的问题,请参考以下文章

Swift:在表格视图中显示 UIImage 数组中的图像

将一张图像分成多个部分后,如何在 Swift 中使用 UIImage 数组?

如何将图像存储到 UIImage 数组(Swift)

无法使用CIFilter从CIImage中提取UIImage

Swift从数组中选择一个随机图像

如何在 Swift 中识别 UIImage 数组中的 Tapped UIImage