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

4
如果我有一个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数组中提取文件名的方法不同吗?

2
也许你应该记住你用来创建图像的名称。 - Hot Licks
看起来这可能是正确的方法。感谢您的建议。 - ADRSPR
4个回答

4
我曾经也遇到过这个问题,浏览了一下资料发现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
}

正如我所说,这对我以及我所需要的场景起作用,希望你也能使用它!

祝好运!


那将是一种非常巧妙的方法。那么,检查索引是否为特定文件名(键)的语法是什么? - ADRSPR
var index = imageDictionary.indexForKey("Key")。 - Mister Orko
1
没问题,Swift 字典有各种方法,希望其中一个适合您。 - Mister Orko

1

一旦您创建了UIImage的实例,所有对名称的引用都会丢失。例如,当您从文件创建图像时,可以执行以下操作:

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

完成这些操作后,不再有对文件名的引用。所有数据都存储在UIImage实例中,无论它来自哪里。如上面的评论所说,如果必须这样做,您需要想出一种存储名称的方法。

谢谢确认。在创建数组之前,我需要进行一些额外的编码工作。 - ADRSPR

0

我的方法是从一个名字的数组开始(因为你不能轻易地从图像返回到名字):

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

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

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

你忘记了解包UIImage(named:$0)返回的可选项! - Leo Dabus
其实,我并没有忘记,这是一个有意的选择 :) 两种方式都可以,但我真的不喜欢强制解包可选项,这样可以更加用户友好地处理它。 - David Berry

0

这是一个非常棘手的问题。我最终设法在表视图控制器中使其工作。(Swift 2.1,Xcode 7)

我的图像名称在“icons”数组中如下,并带有.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)

        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接