Отображение UIImage в массиве с пользовательским классом в Swift
У меня есть пользовательский класс Product, определенный как
class Product: NSObject {
var name: String
var priceLabel: String
var productImage: UIImage
init(name: String, priceLabel: String, productImage: UIImage) {
self.name = name
self.priceLabel = priceLabel
self.productImage = productImage
super.init()
}
}
и я создал массив с этим пользовательским классом
let toy = [
Product(name: "Car", priceLabel: "$5.00"),
Product(name: "Train", priceLabel: "$2.50")
]
Как бы я вставил UIImage в этот массив? Мне нужно было бы вставить разные картинки для каждой игрушки.
заранее спасибо
2 ответа
Решение
Есть несколько способов сделать это, но с вашим кодом будет работать только пример 1:
// Example 1:
let toy = [
Product(name: "Car", priceLabel: "$5.00", productImage:UIImage(named: "myImage.png")!),
...
]
// Example 2:
let product1 = Product(name: "Car", priceLabel: "$5.00")
product1.productImage = UIImage(named: "myImage.png")!
let toy = [
product1,
...
]
// Example 3:
let toy = [
Product(name: "Car", priceLabel: "$5.00"),
...
]
if let prod = toy[0] {
prod.productImage = UIImage(named: "myImage.png")!
}
У вас есть только один init, который принимает 3 параметра, поэтому, если вы создаете такой объект:
Product(name: "Car", priceLabel: "$5.00")
он не скомпилируется, потому что у вас нет инициализатора, который принимает только два параметра.
Попробуй это:
let newArray = toy.map{Product(name: $0.name, priceLabel: $0.priceLabel, productImage:UIImage(named: "myImage.png")!)}
примечание: если вы хотите сделать ваш инициализатор более динамичным, используйте параметры по умолчанию.
init(name: String = "DefaultName", priceLabel: String = "DefaultName", productImage: UIImage = UIImage(named: "DefaultImage")) {
self.name = name
self.priceLabel = priceLabel
self.productImage = productImage
super.init()
}
}