如何从 Swift 5 中的资产文件夹创建图像数组?

How to create an array of images from assets folder in Swift 5?

我是 Swift 开发的新手,在这几个月里,我将个性化一些基础项目,例如骰子应用程序。

目前我有一个问题在 Whosebug 上不容易找到:

1) 如何从位于 assets.xcassets 中的文件夹创建骰子面数组 (目前我已经手动将骰子的 6 个面加载到一个名为 diceArray 的数组中,但是如果骰子有 50 个面,那将是浪费时间)

我的实际代码

class ViewController: UIViewController {


    @IBOutlet weak var diceImageView1: UIImageView!
    @IBOutlet weak var diceImageView2: UIImageView!


    @IBAction func rollButtonPressed(_ sender: UIButton) {

        let diceArray = [ #imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix")]

        diceImageView1.image = diceArray.randomElement()
        diceImageView2.image = diceArray.randomElement()

    }

}

你的数组包含什么?图像?如果是这样,只需使用

从资产中读取它们
var myImagesArray: [UIImage]
// Do this for each image.
let image = UIImage(named: "aName") ?? UIImage()
myImagesArray.append(image)

您可以将图像的名称存储在数组中:

var myImagesArray: [(faceNum: Int, name: String, image: UIImage)]
let image = UIImage(named: "face1") ?? UIImage()
let faceNum = 1
myImagesArray.append((1, "face1",image))

加载图像时,您可以测试一下

myImagesArray[i].num 

尚未使用

一种简单的方法是用固定的前缀和数字来命名所有图像。将图像命名为 face1face2...face50

var imagesArr = (0...50).compactMap { UIImage(named: "face\([=10=])") }

var imagesArr = [UIImage]()
(0...50).forEach { imagesArr.append(UIImage(named: "face\([=11=])")!) }

我认为在数组中加载 50 张图像不是一个好主意。我知道您正在学习教程。
更多同类型图片,可以试试这个

  • 尝试所有图像名称前缀都相同。比如:骰子 1,骰子 2, Dice3... Dice50 // 这里前缀是Dice
  • 获取0-49
  • 之间的随机数
  • 假设你得到一个随机数30,现在你可以简单地通过这种方式得到图像
    let randomNumber = 30  
    let image = UIImage(named: "Dice\(randomNumber)")
    

这种方式不需要创建一个包含50张图片的数组。