如何从 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
尚未使用
一种简单的方法是用固定的前缀和数字来命名所有图像。将图像命名为 face1
、face2
...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张图片的数组。
我是 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
尚未使用
一种简单的方法是用固定的前缀和数字来命名所有图像。将图像命名为 face1
、face2
...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张图片的数组。