써니쿠키의 IOS 개발일기
[swift] singleton 쉬운 예제 구현해보기 본문
Singleton Pattern을 복습하기 위해 간단한 예제를 만들어보았다.
화면 전환 시 View Life Cycle과 관련된 메서드도 이용되었다.
(전체 코드는 제일 하단에)
싱글톤을 이용해서 두 VC에서 같은 value를 공유하도록 하였다.
버튼 재고추가페이지로 이동
클릭 후 모달 화면에서 +10
버튼을 클릭하면
stock이 10씩 추가되도록 하였다.
1. 싱글턴 패턴 이용
싱글턴 패턴을 활용해 두 View Controller 가 하나의 정보를 공유하도록 하기
1. PointManager 클래스를 싱글턴으로 만들기
- class 내부에
private init()
을 구현하고static
을 이용해 타입프로퍼티인sharedStockManager
에 인스턴스화 해 놓으면sharedStockManager
외에는 더 이상StockManager
를 만들 수 없다. 단 한개의 인스턴스인 것
class StockManager {
var stock: Int = 0
static var sharedStockManager = StockManager()
private init(){}
}
2. 싱글턴으로 만든 PointManager의 프로퍼티인 point 접근방법
- 단 하나의 인스턴스인 sharedStockManager 를 통해 접근한다.
let stock = StockManager.sharedStockManager.stock
(추가내용)
2. viewLifeCylMethod 사용하기
- stock 에서 10씩 추가되면서 변하는 순간의 변화를 보여주기 위해
viewDidAppear()
사용하기 viewWillAppear
사용 시: 모달 화면 꺼질 시 10이 추가된 값이 바로 보임.viewDidAppear
사용 시: 모달 화면 꺼질 시 0 -> 10 같이 추가되는 변화가 보임
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
updateStockLabel()
}
func updateStockLabel() {
stockLabel.text = String(StockManager.sharedStockManager.stock)
}
전체코드
1. MainViewController
//싱글톤이 적용된 StockManager Class
class StockManager {
var stock: Int = 0
static var sharedStockManager = StockManager()
private init(){ }
}
class MainViewController: UIViewController {
@IBOutlet weak var stockLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
updateStockLabel()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
updateStockLabel()
}
func updateStockLabel() {
stockLabel.text = String(StockManager.sharedStockManager.stock)
}
@IBAction func touchUpPresentStockChangePage(_ sender: UIButton) {
guard let stockChangePage = storyboard?.instantiateViewController(withIdentifier: "stockChangePage") as? BuyingViewController else { return }
stockChangePage.modalPresentationStyle = UIModalPresentationStyle.fullScreen
self.present(stockChangePage, animated: true)
}
}
2. stockChangeViewController
class BuyingViewController: UIViewController {
@IBAction func touchUpAddTenButton(_ sender: UIButton) {
StockManager.sharedStockManager.stock += 10
dismiss(animated: true)
}
}
반응형
'swift, Ios' 카테고리의 다른 글
[swift] LinkedList에서 head를 nil했을 시 다른 메모리들은 어떻게 될까?? (0) | 2022.09.22 |
---|---|
[swift ]navigation controller 코드로 구현하기 (0) | 2022.09.16 |
[swift] NotificationCenter 구현 (0) | 2022.09.07 |
[swift] KVO 구현하기 (0) | 2022.09.07 |
ios - Auto Layout (1) (0) | 2022.09.06 |
Comments