์ ์ฒด ๊ธ179 [iOS/RxSwift] RxSwift์ RxRealm์ผ๋ก UICollectionView์ฌ์ฉํ๊ธฐ Realm์ Object๋ฅผ ์์ ๋ฐ๋ ํด๋์ค๋ฅผ ํ์ ์ผ๋ก ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๊ฐ์ฒด๋ค์ ์ฝ์ด ์ฌ ์ ์์ต๋๋ค. private lazy var results = try! Realm().objects(Category.self) keyPath์ ์ ๋ฌ๋ ํ๋๊ฐ์ผ๋ก ๋ด๋ฆผ์ฐจ์, ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํด์ ์ ๋ฌ ๋ฐ์ ์ ์์ต๋๋ค. id ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ํด์ฃผ๋ฉด ์๋์ฒ๋ผ ์์ฑํด ์ฃผ๋ฉด ๋ฉ๋๋ค. var updates = try! Realm().objects(Category.self).sorted(byKeyPath: "id", ascending: true) ์ด๋ ๊ฒ ์ ์ด ์ฃผ์ด๋ ๋๊ณ ์ ์ญ ๋ณ์๋ก realm ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ๋นผ์ฃผ์ด๋ ๋ฉ๋๋ค let realm = try! Realm() var updates = realm.objects.. 2022. 9. 19. [iOS/Swift/Library] IQKeyboardManager FirstResponder๋ UITextField์ UITextView๊ฐ ํ๋ฉด์ ๋ณด์ด๋๋ก ํ๋ฉด ์์น๋ฅผ ์๋์ผ๋ก ์ด๋ ์์ผ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ AutoTool์ ์ฌ์ฉํ๋ฉด ํค๋ณด๋์ ํด๋ฐ๋ก ๋ค์ ํน์ ์ด์ UITextField๋ UITextView๋ก ์ด๋ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต ํจ IQkeyboardManager.shared.enable = true ๋ฅผ AppDelegate๋ SceneDelegate์ ์ถ๊ฐํด ์ค class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchO.. 2022. 9. 16. [iOS/XCode] ์๋ฎฌ๋ ์ดํฐ์์ ํ๊ธ ์ํ ์ฌ์ฉํ๊ธฐ, ํค๋ณด๋ ๊บผ๋ด๋ ๋ฒ ์ฐ์ ์๋ฎฌ๋ ์ดํฐ์์ ํค๋ณด๋๋ฅผ ๊บผ๋ด๋ ๋จ์ถํค๋ Command + Shift + k ์ ๋๋ค ์๋ฎฌ๋ ์ดํฐ์ ํ๊ธ ์ ๋ ฅ์ด ์๋ ๋๊ฐ ์๋๋ฐ ์ฌ์ง์ด ํค๋ณด๋์ ํ๊ธ ์ํ๋ ์์ด์ ๋ถํธํ ๋ ์ค์ ์์ ์ฝ๊ฒ ํ๊ธ ์ํ์ ์ถ๊ฐํ ์ ์์ต๋๋ค~ Simulator ์์ Settings๋ก ๋ค์ด๊ฐ ์ค๋๋ค General ๋ฉ๋ด๋ก ๋ค์ด๊ฐ ์ฃผ์ธ์! ์๋จ์ Keyboard ๋ฉ๋ด๊ฐ ๋ณด์ผ ๊บผ์์! ํญํด์ค๋๋ค Keyboards ๋ก ๋ค์ด๊ฐ ์ค๋๋ค! ์ฒซ๋ฒ์งธ ํญ๋ชฉ์ด์์ Add New Keyboard ๋ฅผ ๋๋ฌ์ ํค๋ณด๋๋ฅผ ์ถ๊ฐํด ์ค์๋ค Korean๋ฅผ ์ ๋ ฅํด ์ค๋๋ค ์ผ๋ถ๋ถ๋ง ์ ๋ ฅํด๋ ํ๋จ์ ๋น๋๋ค! Standard ๋๋ฌ์ฃผ์๊ณ Done ๋๋ฌ ์ฃผ์ธ์ ์๋ฎฌ๋ ์ดํฐ ํค๋ณด๋์์ ์ง๊ตฌ๋ณธ ๋ชจ์ ๋๋ฅด์๋ฉด ์์ด/ํ๊ธ ํ ๊ธ ๋ฉ๋๋ค ๐ฅณ 2022. 9. 14. [Swift] MVVMC ์์ธํ ์์๋ณด๊ธฐ - ํํ ๋ฆฌ์ผ 4 (child coordinator ์ญ์ ํ๊ธฐ) 2022.07.10 - [๐ iOS/Architecture Pattern] - [Swift] MVVMC ์์ธํ ์์๋ณด๊ธฐ - ํํ ๋ฆฌ์ผ 1 (Coordinator์ AppCoordinator ๊ตฌํํ๊ธฐ) 2022.07.11 - [๐ iOS/Architecture Pattern] - [Swift] MVVMC ์์ธํ ์์๋ณด๊ธฐ - ํํ ๋ฆฌ์ผ 2 (childCoordinator๋ก ์ด๋ํ๊ธฐ) 2022.07.12 - [๐ iOS/Architecture Pattern] - [Swift] MVVMC ์์ธํ ์์๋ณด๊ธฐ - ํํ ๋ฆฌ์ผ 3 (๋ฒํผ ๋๋ฌ์ ํ๋ฉด ์ ํํ๊ธฐ) ํด๋น ํํ ๋ฆฌ์ผ์ ์ ๊ธ๊ณผ ์ด์ด์ง๋๋ค! ์ด์ ํฌ์คํ ์์ Coordinator์ ํ๋ฉด ์ ํ์ ๋ํด ๋ค๋ฃจ์ด ๋ณด์์ต๋๋ค. MVVMC์์ View์ Coordinator์ ๋ํด.. 2022. 9. 5. [iOS] Fastlane์ผ๋ก ์ฑ ๋ฐฐํฌ ์๋ํํ๊ธฐ - ์ด๋ก ๊ณผ ์ค์น ์ Fastlane์ ์ฌ์ฉํ์๊น? ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ด์ ์ ์งํํ ํ๋ก์ ํธ์ ์ ์ง ๋ณด์๋ฅผ ๋งก๊ณ ์์ต๋๋ค. ์ ์ง ๋ณด์ ์ค์ธ ์ฑ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ง์ง ์์ง๋ง ์กฐ๊ธ์ ์์ ๋ง์ผ๋ก ํ ์คํธ๋ฅผ ์ํด 6๊ฐ์ ์ฑ์ ๋น๋ํ์ฌ in house๋ก ๋ฐฐํฌํด์ผ ํ์ต๋๋ค. ๊ทธ ํ QA๋ฅผ ๊ฑฐ์น๊ฒ ๋๋๋ฐ ์ด ๊ธฐ๊ฐ ๋์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๊ฑฐ๋ ์์ ํด์ผ ํ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋ค์ ์์ ์ ํ๊ณ 6๊ฐ์ ์ฑ์ ๋น๋ํด์ ๋ฐฐํฌํด์ผ ํ์ด์. QA๊ฐ ๋๋๋ฉด ์ํฐํ๋ผ์ด์ฆ ๊ณ์ ์ผ๋ก ๋ค๋ฅธ ์๋ฒ์ ๋ฐฐํฌํ๊ฒ ๋ฉ๋๋ค. ์ฝ๋ ์์ ์ด๋ ์๊ตฌ ์ฌํญ์ ์ ์ง๋ง ์กฐ๊ธ์ ์์ ์ผ๋ก 6๊ฐ์ ์ฑ์ ๋น๋(ํ๋ ๊ฒ๋ ์ค๋ ๊ฑธ๋ฆผ)์ ๋ฐฐํฌํ๋ ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ ค์ ์งํํ๊ณ ์๋ ํ๋ก์ ํธ์๋ ์ํฅ์ด ์ค๋๋ผ๊ตฌ์(์ฌ๋ฌ๊ฐ์ ์ฑ์ผ๋ก ๋ถ๋ฆฌํ์ง ์๊ธฐ ์ํด ํ์๋ฅผ ์์ญ ๋ฒ ํ์ง๋ง ์์ ์ฑ์ ์ด์ .. 2022. 9. 5. [CI/CD] ์ง์์ ํตํฉ๊ณผ ์ง์์ ๋ฐฐํฌ์ ๊ฐ๋ ๊ณผ ์ฅ์ Intro ์ด์ ์ ๊ต์ฅํ ํฅ๋ฏธ๋ก์ด ์์์ ๋ณธ ์ ์ด ์์ต๋๋ค. ํ๋์ ์๋น์ค๋ฅผ ์ด๋ป๊ฒ ๊ธฐํํ๊ณ ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋๋์ง์ ๊ด๋ จ๋ ์์์ด์์ต๋๋ค. ์ฌ์ฉ์๋ง๋ค ๋ฒํผ ๋ฐฐ์น๋ฅผ ๋ค๋ฅด๊ฒ ๋ณด์ด๊ฒ ํด์ ์ด๋ค ์์น์ ๋ฒํผ์ด ๋ ๋ง์ ์ฌ์ฉ์์๊ฒ ๋๋ ธ๋์ง ๋ก๊ทธ๋ฅผ ์์งํ๊ณ , ์ด์ ๋ฐ๋ผ ์์ฌ ๊ฒฐ์ ์ ํ๋ค๋ ๋ด์ฉ์ด์์ต๋๋ค. ์ด๋ ์ด ๋ฒํผ์ ์์น๋ฅผ ๋ฐ๊พธ๋ ํ๋ก์ธ์ค๋ฅผ ์ ๊ตฌ์ถํด ๋์์ ์กฐ๊ธ์ ์์ ์ผ๋ก ๋น ๋ฅด๊ฒ A์ B ์์ ํ ์คํธ ํด ๋ณผ ์ ์์๋ค๊ณ ํฉ๋๋ค. ์ด๋ ๊ฒ ์์ ์ผ๋ถ๋ถ์ ์์ ํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ์๋น์ค๋ฅผ ์ด์ํ๋ค ๋ณด๋ฉด ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๊ฒ ๋๊ณ ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ฐฐํฌํ์ฌ ์๋น์คํ๋ ์ผ์ด ์ฆ์ต๋๋ค. ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ ํ๊ฒ ๋๋ฉด ์ด ์ฝ๋์ ๋ํ ๊ฒ์ฆ์ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ๊ณ QA๊ฐ ์ด๋ฃจ์ด์ง .. 2022. 9. 3. unable to boot the simulator launchd failed to respond ํด๊ฒฐ๋ฒ ์๋จ xCode ํด๋ฆญ > Preferences ํด๋ฆญ Locations ํญ ํด๋ฆญ > ํ๋จ Derived Data ์ ํด๋ ๊ฒฝ๋ก์์ ํด๋ ์ด๋ํ๊ธฐ ์์ด์ฝ ํด๋ฆญ ํด๋์์ ํ์์๋ DerivedData ์ง์ ์ฃผ๊ธฐ ๋น๋ ํ ์๋ฎฌ๋ ์ดํฐ ์ฌ ์คํ 2022. 8. 22. [iOS/Swift] UIImagePickerController ์ฌ์ฉํ๊ธฐ UIImagePickerController ๊ฐ์ฒด ์์ฑ private lazy var picker = UIImagePickerController().then { $0.delegate = self } or var picker = UIImagePickerController() override func viewDidLoad() { picker.delegate = self } ๋ฒํผ target ์ค์ imageButton.addTarget(self, action: #selector(presentPhotoPicker), for: .touchUpInside) @objc func presentPhotoPicker() { present(picker, animated: true) } UIImagePickerControlle.. 2022. 8. 21. [Swift/iOS] UICollectionView layout ์ ๋ฐ์ดํธ collectionView.collectionViewLayout.invalidateLayout() ๋ ์ด์์ ์์ฑ์ ๋ณ๊ฒฝํ๊ณ ์ถ์๋ ๋ช ์์ ์ผ๋ก ๋ ์ด์์์ ์ ๋ฐ์ดํธ ํ ์ ์์ 2022. 8. 20. [iOS/Swift] UITableView Header ๋์ด ์ ๋ฐ์ดํธ ํ๊ธฐ ์คํฌ๋กค ์ UITableView Header๋ฅผ ๊ณ ์ ์ํฌ ์๊ฐ ์๋๋ฐ ํค๋์ ์๋ ๋ฒํผ์ ๋๋ฌ ํค๋์ ๋์ด๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๊ฒฝ์ฐ ex) ํค๋ ๋ฒํผ ๋๋ฅด๋ฉด ๊ฒ์ ์์ญ ๋ ธ์ถ UITableViewHeaderFooterView ์ ๋์ด ์ ๋ฐ์ดํธ ํ๋ ์ฝ๋ ์์ฑ func toggleHeight() { containerView.snp.updateConstraints { make in make.height.equalTo(searchButton.tag).priority(.high) } } header ์ง์ ํ๋ Delegate์์ ํค๋์ ๋ฒํผ์ addTarget ํด์ค ์ด๋ ์ฐ๊ฒฐํ ํจ์๋ updateHeader func tableView(_ tableView: UITableView, viewForHeaderInSectio.. 2022. 8. 17. [LeetCode] 704. Binary Search ๋ณดํธ๋์ด ์๋ ๊ธ ์ ๋๋ค. 2022. 8. 15. [LeetCode] 724. Find Pivot Index pivot ์ธ๋ฑ์ค๋ ์ธํ ์ค์ ๋ชจ๋ ์ผ์ชฝ ์์์ ํฉ๊ณผ ์ค๋ฅธ์ชฝ์ ๋ชจ๋ ์์์ ํฉ์ด ๊ฐ์ ์ง์ ์ ์ธ๋ฑ์ค class Solution { func pivotIndex(_ nums: [Int]) -> Int { var rightSum = nums.reduce(0, +) - nums[0] var leftSum = 0 if rightSum == leftSum { return 0 } for index in 1.. ํผ๋ด ์ธ๋ฑ์ค ๊ธฐ์ค ์ผ์ชฝ ํฉ, ์ค๋ฅธ ์ชฝ ํฉ์ ๊ตฌํด์ผ ํ๋ฏ๋ก ์ ์ฒด ํ์์ ํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ ๋นผ์ค if rightSum == leftSum { return 0 } ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์์ ์ผ์ชฝ ํฉ, ์ค๋ฅธ ์ชฝ ํฉ์ด ๊ฐ์ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๊ฐ ํผ๋ด ์ธ๋ฑ์ค ์ด๋ฏ๋ก 0์ ๋ฆฌํดํจ (์ธ๋ฑ์ค 0์ด ํผ๋ด ์ธ๋ฑ์ค) ์ ์ฒด ํฉ S์์ ํ์ฌ.. 2022. 8. 1. ์ด์ 1 ยทยทยท 3 4 5 6 7 8 9 ยทยทยท 15 ๋ค์