在不知道名称

时间:2016-03-03 11:39:46

标签: ios swift uiimage xcasset

我的资产目录中有多个图像,如下所示。有没有一种方便的方法来加载图像而不是每次都使用硬编码字符串:

var images = [UIImage]()
images.append(UIImage(named: "South_America-Argentina")!)
images.append(UIImage(named: "South_America-Bolivia")!)
images.append(UIImage(named: "South_America-Brazil")!)
// ...

xcassets

2 个答案:

答案 0 :(得分:0)

存储图像名称的一种方法是使用枚举。我在下面提供了两种方法 - 第二种方式为你提供了一个很好的分组。

//Method 1
enum CountryFlags: String {
    case Argentina = "South_America-Argentina"
    case Brazil = "South_America-Brazil"

    var image: UIImage? {
        return UIImage(named: self.rawValue)
    }
}

//Method 2
enum CountryImages {
    enum SouthAmerica: String {
        case Argentina = "South_America-Argentina"
        case Brazil = "South_America-Brazil"

        var image: UIImage? {
            return UIImage(named: self.rawValue)
        }
    }
    enum Africa: String {
        case Egypt = "Africa-Egypt"

        var image: UIImage? {
            return UIImage(named: self.rawValue)
        }
    }
}

你可以像这样使用它:

let method1Image = CountryFlags.Argentina.image
let method2Image = CountryImages.SouthAmerica.Argentina.image

如果您的图片的名称不同,例如按国家/地区代码,那么您可以获取国家/地区代码列表,然后循环遍历列表以加载图片。因此,如果您需要使用代码AR加载阿根廷的标志,您将使用UIImage(名称:" AR")

答案 1 :(得分:0)

目前无法在不知道名称的情况下从xcassets加载图像。一种方法是将图像名称存储在枚举中,如@totiG已经提到的那样,但是有超过100个标记,这将非常耗时。

幸运的是,有一个图书馆已经为我们这样做了:widget toolkit