์ค๋์ ์์ ๋ฆฌ์คํธ์ UI์์ ๊ณผ ํ๋ฉด์ Data๋ฅผ ๋์ฐ๋ ์์ ์ ํ์์ต๋๋ค!
๊ทธ๋ผ ์์ํด๋ณผ๊น์ง?! โจ
WishListApp UI
WishListApp์ ๋ฉ์ธํ๋ฉด์ ๊ทธ์ ๊น๋ํ๊ณ ์ฌํํ์ผ๋ฉด ์ข๊ฒ ๋ค๋ผ๊ณ ์๊ฐ์ ํ์ด์!
๊ทธ๋์ ํ์์ ์ ๊ฐ ์ฆ๊ฒจ์ฐ๋ ์ฑ์ธ " 29CM "์ ์ํ ํ๋ฉด๊ณผ ๋น์ทํ๊ฒ ๋ง๋ค์ด๋ณด์๊ณ ์๊ฐํ๊ฒ ๋์์ต๋๋ค!
์๋ Add to Wish ๋ฒํผ๊ณผ Next to Item ์ด ์๋ View๋ ๊ณ ์ ์ธ ์ํ๋ก Description์ด ๊ธธ์ด์ง๊ฒ ๋๋ฉด View๊ฐ ์คํฌ๋กค์ด ๋๊ฒ๋ ๊ตฌํ์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค! ๊ธ์จ์ฒด๋ ๋ค๋ฅด์ง๋ง ๊ทธ๋๋ ์ ๋ง ๊น๋ํ UI ๊ฐ์์!ใ ใ
WishListApp Data ์ ์ฉํ๊ธฐ
URLSession์ ํตํด ๋ณํํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ProductDataManager์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ค๋๋ค!
let dataManager = ProductDataManager()
๋๋คํ id ๊ฐ์ ํ์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด randomID ๋ณ์์ ํจ์๋ฅผ ๋ง๋ค์ด์ฃผ์์ด์~!
var randomid = 0
func setRandomID() {
guard let randomId = (1...100).randomElement() else { return }
randomid = randomId
}
์ด์ dataManager๋ฅผ ํตํด getProductData์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ต์๋ค!
func setDataAndLabel() {
dataManager.getProductData(id: randomid ) { product in
DispatchQueue.main.async {
if let product = product {
dump(product)
// ๋ฐ์ดํฐ ์ฌ์ฉํ๋ ์ฝ๋
}
}
}
}
์ด ๋, ๋ฐ์ดํฐ๋ฅผ UI์์
์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ DispatchQueue.main.async
๋ฅผ ๊ผญ ์ฌ์ฉํด์ผ ํฉ๋๋ค! ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฐ๋ ๋์์ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ์ธ ์ฐ๋ ๋๋ก ์์ ํ๊ฒ ์ ์กํด์ค๋๋ค.
๋ฐ์ดํฐ๋ฅผ UI์ ํ์ํ๊ธฐ ์ํ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ฐ๋ก ํจ์๋ก ๋ง๋ค์ด์ฃผ์์ต๋๋ค.
func setData(_ product: Product) {
if let url = URL(string: product.thumbnail) {
URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data, error == nil {
DispatchQueue.main.async {
self.productImageView.image = UIImage(data: data)
}
}
}.resume()
}
productBrandLabel.text = product.brand
productTitleLabel.text = product.title
productPriceLabel.text = "\(product.price) ์"
productDescriptionLabel.text = product.description
}
์ด ๋, url ์ฃผ์๋ก ์ด๋ฃจ์ด์ง ์ด๋ฏธ์ง ํ์ผ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ URLSession
์ ํตํ data๋ฅผ ๋นผ๋ด๋ ์์
์ ์ํํด์ฃผ์์ด์ผ ํ์ด์!
setDataAndLabel() ํจ์์ // ๋ฐ์ดํฐ ์ฌ์ฉํ๋ ์ฝ๋ ์ ํด๋น setData(product)
ํจ์๋ฅผ ๋ฃ์ด์ฃผ์์ต๋๋ค.
์ด์ ํจ์๋ฅผ ๋ง๋ค์์ผ๋ฉด ์คํ์ ์์ผ์ผ๊ฒ ์ฃ ?!
viewDidLoad()์ ํจ์๋ฅผ ๋ฃ์ด์ ์ด๊ธฐํ๋ฉด ๊ตฌํ์ ํด์ฃผ์์ต๋๋ค.
override func viewDidLoad() {
super.viewDidLoad()
setRandomID()
setDataAndLabel()
}
์ถ๊ฐ๋ก Next to Item ๋ฒํผ์ด ํด๋ฆญ๋์์ ๋, ํ๋ฉด์ ๋ํ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด์ randomID๋ฅผ ์ถ๋ ฅํ๋ ํจ์์ ํด๋น data๋ฅผ ๊ฐ์ ธ์์ ui๋ฅผ ๊ทธ๋ฆฌ๋ ํจ์๋ฅผ ์ถ๊ฐํด์ฃผ์์ด์!
@IBAction func nextToItemTapped(_ sender: UIButton) {
setRandomID()
setDataAndLabel()
}
ViewController์ ์ ์ฒด์ฝ๋
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var productImageView: UIImageView!
@IBOutlet weak var productBrandLabel: UILabel!
@IBOutlet weak var productTitleLabel: UILabel!
@IBOutlet weak var productPriceLabel: UILabel!
@IBOutlet weak var productDescriptionLabel: UILabel!
@IBOutlet weak var addToWishButton: UIButton!
let dataManager = ProductDataManager()
var randomid = 0
override func viewDidLoad() {
super.viewDidLoad()
setRandomID()
setDataAndLabel()
}
func setRandomID() {
guard let randomId = (1...100).randomElement() else { return }
randomid = randomId
}
func setDataAndLabel() {
dataManager.getProductData(id: randomid ) { product in
DispatchQueue.main.async {
if let product = product {
dump(product)
self.setData(product)
}
}
}
}
func setData(_ product: Product) {
if let url = URL(string: product.thumbnail) {
URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data, error == nil {
DispatchQueue.main.async {
self.productImageView.image = UIImage(data: data)
}
}
}.resume()
}
productBrandLabel.text = product.brand
productTitleLabel.text = product.title
productPriceLabel.text = "\(product.price) ์"
productDescriptionLabel.text = product.description
}
@IBAction func addToWishTapped(_ sender: UIButton) {
}
@IBAction func nextToItemTapped(_ sender: UIButton) {
setRandomID()
setDataAndLabel()
}
}
๊ตฌํ ํ๋ฉด
์ค๋์ ์ฌ๊ธฐ๊น์ง~!
๋ด์ผ์ Add to Wish ๋ฒํผ์ด ํด๋ฆญ๋์์ ๋, ํด๋น ๊ฐ์ CoreData์ ์ ์ฅํ๋ ๋ก์ง์ ๊ตฌํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค~!