【问题标题】:Load image from xcassets without knowing the name在不知道名称的情况下从 xcassets 加载图像
【发布时间】:2016-06-16 17:17:36
【问题描述】:

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

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

【问题讨论】:

    标签: ios swift uiimage xcasset


    【解决方案1】:

    存储图像名称的一种方法是使用枚举。我在下面提供了 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")

    【讨论】:

    • 问题是我有超过 100 个标志,我必须为每个标志写一个案例。
    【解决方案2】:

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

    幸运的是,有一个图书馆已经为我们做了这件事:FlagKit

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-25
      • 2022-08-03
      • 2018-02-06
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 2014-08-10
      相关资源
      最近更新 更多