在不知道名称的情况下从 xcassets 加载图像
Load image from xcassets without knowing the name
我的资产目录中有多个图像,如下所示。有没有一种方便的方法可以不用每次都使用硬编码字符串来加载图像:
var images = [UIImage]()
images.append(UIImage(named: "South_America-Argentina")!)
images.append(UIImage(named: "South_America-Bolivia")!)
images.append(UIImage(named: "South_America-Brazil")!)
// ...
存储图像名称的一种方法是使用枚举。我在下面提供了 2 种方法 - 第 2 种给你一个很好的分组。
//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(named: "AR")
目前无法在不知道名称的情况下从 xcassets 加载图像。一种方法是将图像名称存储在 enums 中,正如@totiG 已经提到的那样,但是如果有超过 100 个标志,这将非常耗时。
幸运的是,有一个图书馆已经为我们做了这件事:FlagKit
我的资产目录中有多个图像,如下所示。有没有一种方便的方法可以不用每次都使用硬编码字符串来加载图像:
var images = [UIImage]()
images.append(UIImage(named: "South_America-Argentina")!)
images.append(UIImage(named: "South_America-Bolivia")!)
images.append(UIImage(named: "South_America-Brazil")!)
// ...
存储图像名称的一种方法是使用枚举。我在下面提供了 2 种方法 - 第 2 种给你一个很好的分组。
//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(named: "AR")
目前无法在不知道名称的情况下从 xcassets 加载图像。一种方法是将图像名称存储在 enums 中,正如@totiG 已经提到的那样,但是如果有超过 100 个标志,这将非常耗时。
幸运的是,有一个图书馆已经为我们做了这件事:FlagKit