import UIKit
import SDWebImage
class FullScreenImageViewController: UIViewController {
...
// MARK: - Properties
private var images: [String] = []
private var currentIndex: Int = 0
// MARK: - Initializer
init(images: [String], currentIndex: Int) {
self.images = images
self.currentIndex = currentIndex
super.init(nibName: nil, bundle: nil)
self.modalPresentationStyle = .fullScreen
}
...
FullScreenImageViewController에서 이미지를 init을 통해 받는 방식은 의도적으로 ViewController를 초기화할 때 필요한 데이터를 안전하게 전달하기 위해 사용한 것입니다. 하지만 사용자가 제안한 대로 변수를 선언하고 ViewController가 화면에 표시되기 전에 데이터를 설정하는 방법도 가능합니다.
1. init을 통해 데이터를 전달하는 방식
장점:
- 데이터를 ViewController가 생성될 때 한 번에 전달하므로, ViewController가 초기화되는 시점에 필요한 모든 정보를 가지고 있게 됩니다.
- ViewController가 초기화될 때 필수적인 데이터를 전달받도록 강제할 수 있어, 개발 중 실수로 인해 데이터가 누락되는 것을 방지합니다.
- 코드 구조가 명확하고 데이터의 흐름을 이해하기 쉽습니다.
init(images: [String], currentIndex: Int) {
self.images = images
self.currentIndex = currentIndex
super.init(nibName: nil, bundle: nil)
}
이 방식은 FullScreenImageViewController를 사용할 때 반드시 필요한 데이터를 제공하도록 강제하므로 안전성이 높아집니다.
2. 변수를 선언하고 이후에 데이터를 설정하는 방식
장점:
- ViewController를 초기화한 후 데이터를 나중에 설정할 수 있어, 상황에 따라 유연하게 사용할 수 있습니다.
- 초기화 시점에 데이터를 제공하지 않고, 특정 이벤트가 발생할 때 데이터를 설정할 수 있습니다.
class FullScreenImageViewController: UIViewController {
// MARK: - Properties
var images: [String] = []
var currentIndex: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
// setup logic
updateImage()
}
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let fullScreenVC = FullScreenImageViewController()
fullScreenVC.images = detailImages
fullScreenVC.currentIndex = indexPath.item
present(fullScreenVC, animated: true)
}
단점:
- 데이터를 나중에 설정하기 때문에 viewDidLoad 등에서 images나 currentIndex에 대한 의존성이 있을 때, 누락되면 문제가 발생할 수 있습니다.
- 잘못된 시점에 데이터가 전달되면 UI가 올바르게 업데이트되지 않을 수 있습니다.
결론
둘 중 어떤 방식을 선택할지는 사용자의 상황과 요구에 따라 다릅니다. 일반적으로 ViewController가 꼭 필요한 데이터가 있다면 init을 통해 초기화 시점에 받는 것이 안전하고 깔끔한 방법입니다. 하지만 데이터 전달 시점에 유연성이 필요하다면 변수를 사용해 나중에 설정하는 방식도 괜찮습니다.
'iOS > UIKIT' 카테고리의 다른 글
나중에 꼭 해봐야할 "공유" 기능 -> UIActivityViewController (2) | 2024.10.24 |
---|---|
컬렉션뷰에 있는 이미지를 누르면 전체화면에서 볼수 있는 방법은? (0) | 2024.10.22 |
JSON에서 받아온 homepage 데이터는 HTML 태그 제거 (1) | 2024.10.22 |
테이블에 3개씩 끊어서 데이터를 더보기 해주는 방법 (0) | 2024.10.21 |
셀의 개수에 맞춰 자동으로 높이가 조절되는 테이블 뷰를 구현 (1) | 2024.10.21 |