์ ์ฒด ๊ธ40 [iOS] iOS Concurrency - 1. GCD/Operation, ๋๊ธฐ/๋น๋๊ธฐ, ์ง๋ ฌ/๋์ Inflearn: iOS Concurrency ํ๋ก๊ทธ๋๋ฐ ๊ฐ์ ์ ๋ฆฌ 1. GCD/Operation์ ์์ 1) ์ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ด ํ์ํ ๊น? ์ฐ๋ ๋ : ์ผํ๋ ๋ ์๋ค : ์์ดํฐ 11ํ๋ก 6์ฝ์ด ( ์ผ์ํ๋ ๋ ์์ด 6๊ฐ๊ฐ ๋ฌ๋ ค์๋ค, ๋ช๊ฐ์ ์ฐ๋ ๋๊ฐ ์๋์ง๋ ์๋ ค์ง์ง ์์ ๋๋ต 12๊ฐ ์ด์ ์ ๋) ์์ดํฐ์ 16๋ฐ๋ฆฌ์ 1์ด๋ง๋ค ๊ต์ฅํ ๋น ๋ฅด๊ฒ ๋ฆฌํ๋ ์ฑ์ ํ๋๋ฐ ๊ทธ ์์ ์ ๋ฌด์ธ๊ฐ๊ฐ ๋ฐฉํดํ๊ณ ์์ด์ ์์์ฒ๋ผ ๋ฒ๋ฒ ์ด๋ ํ์ ๋ฐ์ํ๋ค! ์์ดํฐ์ ์ผํ๋ ๋ ์์ด ์ฌ๋ฟ์ธ๋ฐ ์ ๋ฒ๋ฒ ์๋๊ฐ? ๐ก → ํ๊ฐ์ ์ฐ๋ ๋์์๋ง ์ผ์ ์์ผฐ๊ธฐ ๋๋ฌธ์ ๋ฒ๋ฒ ์ธ ๊ฒ. cmd + 7 ๋๋ฅด๋ฉด ์์ฒ๋ผ ์ด๋ค ์ค๋ ๋๊ฐ ์ผํ๊ณ ์๋์ง ํ์ธ ๊ฐ๋ฅ ํ๋ก๊ทธ๋๋ฐ์ ์๋ชปํด์ ์ฐ์ฐ์ฐฎ๊ฒ ํ๋ฉด์ ๊ด๋ฆฌํ๋ ํ ๊ฐ์ ์ค๋ ๋๋ง ๊ณ์ ์ฌ์ฉํด์ ๋ฒ๋ฒ ์ด๊ฒ ๋จ ๊ทธ๋์์๋ ์ฐ๋ฆฌ๊ฐ.. 2023. 2. 11. [GitHub] PR, Issue ํ ํ๋ฆฟ ๋ฃ๊ธฐ ํธ๋ฆฌํ github ํ์ ์ ์ํด์ ๋๊ณ ๋๊ณ ์ธ pr๊ณผ issue ํ ํ๋ฆฟ ๋ฃ๋ ๋ฐฉ๋ฒ์ ๋น ๋ฅด๊ฒ ์ฝ์ญ ์์๋ด ์๋ค. Issue ํ ํ๋ฆฟ ๋ฃ๊ธฐ ์ด์ํ ํ๋ฆฟ์ github ์๊ฒฉ ๋ ํฌ์์ ํธ๋ฆฌํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. 1. Settings ๋ค์ด๊ฐ๊ธฐ ํ ํ๋ฆฟ ์ค์ ์ ์ํ๋ repository์ settings์ ๋ค์ด๊ฐ๋๋ค. 2. Set up templates ํด๋ฆญ ์คํฌ๋กค์ ๋ด๋ ค Features - Issues - Set up templates ์ด๋ก์ ๋ฒํผ์ ๋๋ฌ์ค๋๋ค. 3. ์ํ๋ ํ ํ๋ฆฟ ์ข ๋ฅ ์ ํ ์ฌ๋ฌ ์ข ๋ฅ์ ํ ํ๋ฆฟ์ ๋ง๋ค์ด ๋๋ฉด ์ด์๋ฅผ ์์ฑ ํ ๋ ์ด์์ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ง๋ ํ ํ๋ฆฟ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. 4. ํ ํ๋ฆฟ ์์ฑ feature request๋ฅผ ์ ํํ์๊ณ preview and edit ์ ๋๋ฌ์ค๋๋ค. ์์ ์ ์ํด ์ฐ.. 2023. 2. 10. [iOS] Rx์์ด ๊ตฌํํ๋ MVVM๊ธฐ์ด MVVM ํจํด์ ์ฌ์ฉํ์ฌ ์๋ฒ(API)์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ํ ์ด๋ธ ๋ทฐ์ ํ์ํ๋ ์์ ์๋ฒ์์ ์ง์ ๋ฐ์ดํฐ ๋ชฉ๋ก์ ๋ํ ๋ฆฌ์คํฐ์ค(response)๋ฅผ ์ ๊ณตํ์ฌ ์ด ๋ชฉ๋ก์ ํ ์ด๋ธ ๋ทฐ์ ํ์ํ๋ค. MVVM ๊ตฌ์ฑ ์์์ ๊ฐ์์ ์ญํ ๋ทฐ ์ปจํธ๋กค๋ฌ (View Controller): UI ๊ด๋ จ ์์ ๋ง ์ํํ๋ค. ์๋ฅผ ๋ค์ด ์ ๋ณด ํ์ ๋ฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฑ์ ์์ ์ด ์๋ค. ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ๋ทฐ ๋ ์ด์ด์ ์ผ๋ถ์ด๋ค. ๋ทฐ๋ชจ๋ธ (View Model): ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก๋ถํฐ ์ ๋ณด๋ฅผ ์์ ํ๊ณ ์ด ๋ชจ๋ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ ๋ค ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก ๋ค์ ๋ณด๋ธ๋ค. ๋ชจ๋ธ (Model): MVC์์์ ๊ฐ์ ๋ชจ๋ธ์ด๋ค. ๋ทฐ๋ชจ๋ธ์ด ์ฌ์ฉํ๊ณ ๋ทฐ๋ชจ๋ธ์ด ์ ์ ๋ฐ์ดํธ ์ ๋ณด๋ฅผ ๋ณด๋ผ ๋๋ง๋ค ๋ชจ๋ธ๋ ์ ๋ฐ์ดํธํ๋ค. ์์ ๋์ ๋ฐฉ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ํธ์ถ๋๋ฉด ๋ทฐ๋ ๋ทฐ ๋ชจ๋ธ์ ๋ํ ์ฐธ์กฐ๋ฅผ .. 2023. 2. 9. [iOS] UIButton.Configuration ์ฌ์ฉํด๋ณด๊ธฐ SNS ๋ก๊ทธ์ธ ๋ฒํผ์ ๋ง๋ค๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ์๋ค private let kakaoLoginButton = UIButton().then{ $0.setImage(UIImage(named: "img_logo_kakao"), for: .normal) $0.backgroundColor = UIColor.kakaoyellow $0.setTitle("์นด์นด์ค๋ก ๊ณ์ํ๊ธฐ", for: .normal) $0.setTitleColor(UIColor.snslogoblack, for: .normal) $0.titleLabel?.font = UIFont.hanSansBoldFont(ofSize: 16) $0.clipsToBounds = true $0.layer.cornerRadius = 10 } ์ ์ด๋ฏธ์ง์ ๊ธ์จ ์ฌ.. 2023. 2. 7. [iOS] ์ ํ๋ฆฐ์์ Xcode ์ปฌ๋ฌ์์ ๋ฐ๋ก ์ถ์ถ ์ ํ๋ฆฐ์์ ๋ง๋ค์ด ์ค swift UIColor Extension ์ฝ๋ ๊ธ์ด๋ค๊ฐ ํ๋ก์ ํธ์ ์ถ๊ฐํด์ฃผ๋ฉด ์์์ด ์ถ๊ฐ๋๋ค.! ํ์ง๋ง ์ฝ๋๋ง ์๊ณ ๋ฌด์จ ์์ธ์ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ ์ด๋ ต๋ค ๐ฅฒ ๋ฐ๋ผ์ ์๋์ฒ๋ผ ์์ ์นดํ๋ก๊ทธ์๋ Color Asset์ถ๊ฐํด์ ์์ ๋ฏธ๋ฆฌ ๋ณด๋ฉด์ ์ฐ๊ณ ์ถ๋ค๋ฉด ~!? ์ค๋ฅธ์ชฝ ์์ ์๋ Export ๋ฒํผ์ ๋๋ฌ์ค๋ค ! ์ถ๊ฐํ๊ณ ์ถ์ ํ๋ก์ ํธ์ .xcassets ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ํํ๊ณ Export ๋ฒํผ ๋๋ฌ์ฃผ๋ฉด ๋! ์ค๋ณด์์๋ ์ฌ์ฉํ ์ ์๊ฒ ๋๋น 2023. 2. 5. [iOS] ์คํฌ๋กค ์ ํ์์ ๋ํ๋๊ฒ ํ๊ธฐ CollectionView๊ฐ ์คํฌ๋กค ๋๋์ง ํ์ ํด์ ํน์ ๋ทฐ๋ฅผ ๋์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค! ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ํ๋จ ์คํฌ๋กค์์ ๊ณ ์ ๋์ด์๋ ์๋จ ๋ก๊ณ ๋ทฐ์ ์คํฌ๋กค ๋๋ ์์ญ ์ฌ์ด์ ํ์์ ์ด ๋ํ๋๋๋ก ํ๋ ํ๋จ๊ณผ ๊ฐ์ ๋ทฐ๋ฅผ ๊ตฌํํ์ด์ผํ๋๋ฐ์! ์ฒ์์ ํฌ์ ์ค์ฒ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ธ๊ฐ ๊ณ ๋ฏผํ์ง๋ง ์ ๋ง ์๊ฐ๋ณด๋ค ์ฌ์ด ์์ ์ด์์ต๋๋ค. 1. CollectionvView๋ฅผ ๊ฐ์ง๊ณ ์๋ ViewController๊ฐ UIScrollViewDelegate๋ฅผ ์ฑํ ํ๋๋ก ํฉ๋๋ค. extension MainViewController: UIScrollViewDelegate{ } 2. scrollViewDidScroll ํจ์๋ฅผ ๊ตฌํํด์ค๋๋ค. ์คํฌ๋กค์์ ๋ด๋ถ์ ์ผ๋ก ํธ์ถ ๋๋ ํจ์์ธ func scrollViewDidScroll(_ scr.. 2023. 2. 2. [Swift] ์ค์ํํธ ์ง๋ฒ ๋ณํํ๊ธฐ let DecimalToThree = String(n,radix: 3)//10์ง๋ฒ ์ซ์๋ฅผ 3์ง๋ฒ ์ซ์๋ก ๋ณํ let ThreeToDecimal = Int(DecimalToThree,radix:3)! //3์ง๋ฒ ์ซ์๋ฅผ 10์ง๋ฒ ์ซ์๋ก ๋ณํ String์ init(_:radix:) ํจ์๋ฅผ ์ฐ๋ฉด 10์ง๋ฒ ์ซ์๋ฅผ ์ํ๋ ์ง๋ฒ ์ซ์๋ก ๋ณํ ํด์ค๋ค! ๋ฐ๋๋ก Int์ init(_:radix:)ํจ์๋ฅผ ์ฐ๋ฉด ํด๋น ์ง๋ฒ์ 10์ง๋ฒ ์ซ์๋ก ๋ณํ ํด ์ค๋ค. 2023. 1. 25. [Swift] ํํ๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด ์กฐ๊ฑด ๋ฃ์ด์ ์ ๋ ฌํ๊ธฐ var arrFailRate = [(rate:Double,stage:Int)]() //์ค๊ฐ ์ฝ๋ ์๋ต for i in 0.. $1.rate) || ($0.stage < $1.stage) }) ์์ ๊ฐ์ด ํ๋ฉด ํํ๋ค๋ก ์ด๋ฃจ์ด์ ธ์๋ ๋ฐฐ์ด ๋ด๋ถ์์ rate๊ฐ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ๋ก ์ ๋ ฌ๋ ํ rate๊ฐ ๊ฐ์ผ๋ฉด stage๊ฐ์ด ์ค๋ฆ์ฐจ์ธ ์์๋ก ์ ๋ ฌ ๋๋ค. 2023. 1. 24. [iOS] navigationController.present()๋ฅผ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? print(navigationController.viewControllers) // [HomeVC,FriendsListVC] guard let vc = UIStoryboard(name: "FriendsAdd", bundle: nil).instantiateViewController(withIdentifier: FriendsAddVC.identifier) as? FriendsAddVC else { return } vc.modalPresentationStyle = .fullScreen navigationController.present(vc, animated: true) print(navigationController.viewControllers)// [HomeVC,FriendsListVC] navigatio.. 2023. 1. 6. [Swift] guard๋ฌธ ์์๋ณด๊ธฐ(guard let๊ณผ if let์ ์ฐจ์ด์ ๊น์ง) ์๋ฌด ์๊ฐ ์์ด ์ต์ ๋ ๋ฒ๊ธธ ๋ ์ผ๋ ๊ทธ๋์ ๋๋ฃจ๋ญ์ ํ๊ฒ ์๋ guard๋ฌธ์ ๋ฟ์ ๋ด ์๋ค. guard๋ฌธ guard ๋ฌธ์ if๋ฌธ๊ณผ switch๋ฌธ์ฒ๋ผ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฌด์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌ ํ ๋ ์ฐ์ด๋ ์กฐ๊ฑด๋ฌธ ๋ฌธ๋ฒ์ ๋๋ค! guard ๋ฌธ์ ์ด๋ ํ ์กฐ๊ฑด์ ๊ฒ์ฌํ๊ณ guard ๋ฌธ ๋ฐ์ ์๋ ์ฝ๋๋ฅผ ์คํํ ์ง ๋ง์ง ๊ฒฐ์ ํ๋ ์กฐ๊ฑด๋ฌธ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค. if๋ฌธ์ else๋ฌธ ์์ด๋ ์ธ ์ ์์ง๋ง guard ๋ฌธ์ ๋ฌด์กฐ๊ฑด else ๋ฌธ์ ๊ฐ์ง๊ณ ์ด else๋ฌธ ์์์๋ ๋ฌด์กฐ๊ฑด return์ผ๋ก ์ข ๋ฃ ์ํต๋๋ค. ์ ๋ฆฌํ๋ฉด, guard ๋ฌธ์ ์ฃผ์ด์ง ์กฐ๊ฑด๋ฌธ์ด ์ฐธ์ด๋ฉด ๋ฌธ์ ์์ด ๋ฐ์ ์๋ ์ฝ๋๋ฅผ ์คํํ๊ณ ๊ฑฐ์ง์ผ ๋, ์ฌ๊ธฐ์ ํญ์ ๋ฌ๋ ค์๋ else๋ฌธ ์ฝ๋ ๋ถ๋ญ์ด ์คํ๋ฉ๋๋ค. guard๋ '๋น ๋ฅธ ์ข ๋ฃ'๊ฐ ํต์ฌ ํค์๋ ์ ๋๋ค. ์ฆ, ์ํ๋.. 2023. 1. 5. ์ด์ 1 2 3 4 ๋ค์