Hash๋? ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ, ์ ์งํ๋ ์๋ฃ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ค์ ํด์ ํจ์๋ฅผ ํตํด key๋ก ๋ถ๋ฅํ๊ณ , ๊ทธ key์ ๋ฐ๋ผ value๋ฅผ ์ ์ฅํ๋ ํํ๋ฅผ ๋ปํ๋ค. HashTable์ด๋ Key๋ฅผ ์ด์ฉํด ๋ฐฐ์ด์ Index๋ฅผ ์ฐพ๊ณ , ๊ทธ ์ธ๋ฑ์ค๋ฅผ ํตํด ๊ฐ์ ๊ฐ์ ธ์จ๋ค. "์ ๋ฆฌ"์ ์์ด ์ด๋ฆ์ ์ฐพ๊ธฐ ์ํด 1. "์ ๋ฆฌ"๋ผ๋ key๋ฅผ hash ํจ์์ ์ ๋ฌํ๋ค 2. hash ํจ์ ๋ด์ hashํจ์๋ฅผ ํตํด ์ฐพ์ value์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ๋๋ค. 3. ์ฐพ์ ์ธ๋ฑ์ค๋ฅผ ํตํด value๊ฐ "jarry"๋ฅผ ์ป๋๋ค. Hashable์ด๋? https://developer.apple.com/documentation/swift/hashable Hashable | Apple Developer Documentation A type that can be h..
iOS
UIAlertAction์ ์ฌ์ฉํ๋ฉด์ ์ด๋ค ๋ฒํผ์ ๋๋ ์ ๋ UIAlertAction์ ๊ทธ ํจ์ ๋ด์์ ์ค์ ํ์ฌ addAction()ํ๋ ๊ฒฝ์ฐ๋ก๋ง ์ฌ์ฉํ์๋๋ฐ ํ์ํ Actions๋ฅผ ๋ฏธ๋ฆฌ ํ๋กํผํฐ๋ก ์ ์ฅํด๋ ํ ์ถํ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ UIAlertAction์ ์ ๋ฌํ์ฌ UIAlertController๋ก ๋์ฐ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด๋ณด๊ฒ ๋์๋ค. var myActions: [UIAlertAction] = [] ๋จผ์ ๋ด๊ฐ ์ ์ฅํ ์ก์
๋ฐฐ์ด์ ํด๋์ค ๋ด ํ๋กํผํฐ๋ก ๋ฏธ๋ฆฌ ์ ์ธํด๋๋ค. private func setupAlertActions() { let action1 = UIAlertAction(title: "action1", style: .default, handler: { _ in print("select action1"..
๋๋ ์๋ก์ด ๊ฐ๋
์ ์ ํ ๋ ๋ญ๊ฐ ์ด๊ฑธ ์ฌ์ฉํด์ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ๋์์ด ๋๊ณ , ์ ์ฌ์ฉํ๋์ง๋ฅผ ์ฒด๊ฐํ์ ๋ ๊ทธ ๊ฐ๋
์ ์์ ํ ๋ฐ์๋ค์ผ ์ ์๋ ๊ฒ ๊ฐ๋ค. ๋ญ๊ฐ ๋ด๊ฐ ์ด ๊ฐ๋
์ ํ์์ฑ์ ์จ์ ํ ๋๋ผ์ง ๋ชปํ๋ฉด ์ฌ์ฉ์ ํ๋ฉด์๋ ๋ง์ ํ์ผ ์ ์๋ฌธ์ด ์๊ฒ ์๋ฆฌ์ก๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋๋ ํ์
์ ํ๊ณ ์ผ์ ํ๊ธฐ ์ํด์๋ ๋ด๊ฐ ๋ง์์ผ๋ก ์์ ํ ๋ฐ์๋ค์ด์ง ์์์์๋ ๊ทธ๊ฒ ๋ฌด์์ธ์ง ์๊ณ ๋น ๋ฅด๊ฒ ๋ฐ์๋ค์ผ ์ ์๋ ์ค๋น๋ ๋์ด์์ด์ผ ํ๋๊ฒ ๋ง๋ค๊ณ ๋ ์๊ฐํ๋ค.(๊ทผ๋ฐ ๊ทธ๋ ๊ฒ ์ํ์ใ
ใ
) ์ด๋ฒ์ Coordinator Pattern์ ์ฒ์ ๊ณต๋ถํ๊ฒ ๋์๋ค. ์์ ์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ํตํด ๊ฐ๋
์ ์ ํ ์ ์ ์์์ง๋ง ๊ทธ๋๋ ์ค๋ ฅ์ด ๋ถ์กฑํด์ ์ธ๊ฐ ํ์์ฑ์ ์จ์ ํ ๋๋ผ์ง ๋ชปํ๋ค. ์ ๊ทธ๋ฌ๋์ง ์๊ฐํด๋ณด๋ฉด ๋๋ฌด ์์ ํ๋ก์ ํธ์ ์ด ๊ฐ๋
์ ..
RxSwift๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์์ฃผ ์ ํ๊ฒ ๋๋ subscribe, bind, drive๋ฅผ ๋น๊ตํ์ฌ ์ ๋ฆฌํด๋ณด์! 1. subscribe public func subscribe( onNext: ((Element) -> Void)? = nil, onError: ((Swift.Error) -> Void)? = nil, onCompleted: (() -> Void)? = nil, onDisposed: (() -> Void)? = nil ) -> Disposable { let disposable: Disposable if let disposed = onDisposed { disposable = Disposables.create(with: disposed) } else { disposable = Disposable..
์์ฃผ ์ฌ์ฉ๋๋ Operator์ธ๋ฐ ์๊ฐํด๋ณด๋ ์ฐจ์ด์ ์ ๋ช
ํํ๊ฒ ์ดํดํ ํ ์ฌ์ฉํ์ง ์๊ณ ๊ทธ๋๊ทธ๋ ์ฐพ์์ ์ฌ์ฉํ์์ด์ ์ด๋ฒ ๊ธฐํ์ ๋ช
ํํ ๊ฐ๋
์ ์ ๋ฆฌํ๊ณ ์ ํ๋ค. Merge ์ฌ๋ฌ Observable์ด ๋ฐฉ์ถํ๋ ํญ๋ชฉ๋ค์ ํ๋์ Observable์ด ๋ฐฉ์ถํ๋๋ก ๋ณํฉํ๋ค. ๋ง๋ธ ๋ค์ด์ด๊ทธ๋จ๊ณผ ๊ฐ์ด ์ฒซ๋ฒ์งธ ์คํธ๋ฆผ๊ณผ ๋๋ฒ์งธ ์คํธ๋ฆผ์ ํฉ์ณ ํ๋์ ์คํธ๋ฆผ์ผ๋ก ๋ง๋ค์ด์ค๋ค. ์ด๋ ์ฒซ๋ฒ์งธ ์คํธ๋ฆผ, ๋๋ฒ์งธ ์คํธ๋ฆผ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ๋ง๋ค ๋ฐ๋ก๋ฐ๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๋ค. ๋จ์ํ ๋ ์คํธ๋ฆผ์ ์ด๋ฒคํธ๋ฅผ ํ๋๋ก ํฉํ๊ธฐ ๋๋ฌธ์ ์คํธ๋ฆผ์ ๊ตฌ๋ณ ํ ์๋ ์๋ค. let firstSubject = BehaviorSubject(value: 1) let secondSubject = BehaviorSubject(value: 2) let thirdSu..
์ฐ์ฐํ ViewModel์ input๊ณผ output์ ๋ํ ์กด์ฌ๋ฅผ ์๊ฒ ๋์๋ค. ๊ทธ๋ฌ๋ ๋ด๊ฐ ์ด ๋ถ๋ถ์ ์์ง ๋ชปํ๊ณ , ์ฐพ์๋ณด๋ ๊ต์ฅํ ์์ฃผ ์ฌ์ฉ๋๋ ๊ฐ๋
์ธ ๊ฒ ๊ฐ์ ๊ณต๋ถํด๋ณด๊ณ ์ํ๋ค! ๊ฐ์ฅ ๋จผ์ input/output ํจํด์ด ๋ฌด์์ด๊ณ , ์ด๋ฅผ ์ ์ฌ์ฉํ ๊น? 1. input (View -> ViewModel) View์์ ViewModel์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ (View๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํจ) ex) ํ
์คํธ ํ๋ ์
๋ ฅ ๋ฐ์ดํฐ 2. output (ViewModel -> View) ViewModel์์ View์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ (View๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์) ex) ํ๋ฉด ์ ํ, ์
๋ ฅํ ๊ฐ์ ๋ํ ๊ฒฐ๊ณผ(๋ก๊ทธ์ธ ์ฑ๊ณต ์ ๋ฌด, ์ด๋ฉ์ผ/๋น๋ฐ๋ฒํธ ์ ํจ์ฑ ๋ฑ) ๊ฐ๋จํ ์ค๋ช
ํ๋ input์ ์ ์ ์ ๋์์ ํตํด ๋ค์ด์จ ๋ฐ์ด..
ํด๋ฆฐ์ฝ๋ ๋
ํ๊ฐ .. :) ๋๋ณด๊ธฐ ํด๋ฆฐ์ฝ๋๋ฅผ ์ฝ๊ณ ๋ ์ข์ ์ฝ๋์ ๊ด์ฌ์ด ์๊ธฐ๊ฒ ๋์๋ค. ๊ธฐ์กด ๊ฐ๋ฐ ๋ฐฉ์์ ๊ตฌํ์ ์์ฃผ๋ก ๊ณ ๋ฏผ์ ํ์๋๋ฐ, ํด๋ฆฐ์ฝ๋์ ๋์จ ๋ด์ฉ์ ๋ด ํ๋ก์ ํธ์ ์ง์ ์ ์ฉํด๋ณด๋ ๊ณผ์ ์ ํตํด ๋ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ถ๋ค๋ ๊ณ ๋ฏผ์ ํ๊ฒ ๋์๋ค. ํด๋ฆฐ์ฝ๋์ ๋์์๋ ๋ด์ฉ๋ค์ด ์ ๋ถ ๋ค ๋ง๋ ๋ง์ด๋ผ๊ณ ์๊ฐํ์ง ์๋๋ค. ์ํฉ์ ๋ฐ๋ผ ์ข์ง ๋ชปํ ๋ฐฉ๋ฒ, ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด ํจ์จ์ ์ผ ์ ์๊ณ , ํจ์จ์ ์ธ, ๋ค๋ฅธ์ฌ๋๋ค์ด ์ ํธํ๋ ๊ทธ๋ฐ ๋ฐฉ์๋ค์ด ๋นํจ์จ์ ์ผ ์ ์๋ค. ์๋ฅผ๋ค์ด ์ด๋ค ๋ฌ๋์ปค๋ธ๊ฐ ๋์ ์ํคํ
์ฒ๋ฅผ ๋์
ํ๊ธฐ ์ํด ํ์๋ค์ด ๋ง์ ์๊ฐ๊ณผ ๋
ธ๋ ฅ์ ์๋นํด์ผ ํ๋ค๋ฉด, ๊ทธ๋ฐ๋ฐ ์ด ๋ ํ๋ก์ ํธ ๊ธฐํ์ด ์งง๋ค๋ฉด ๊ณผ์ฐ ๊ทธ ์ํคํ
์ฒ๋ฅผ ๋์
ํ๋๊ฒ ์ฌ๋ฐ๋ฅธ ์ ํ์ผ๊น? ํ์ฌ์ ๋๋ ์ฌ๋ฐ๋ฅด์ง ์๋ค๊ณ ์๊ฐํ๋ค. ์ข์ ์ํคํ
์ฒ, ๊ณ ๋ฏผ..
์์ ์๋ Pagination์ ํด ๋ณธ ๊ฒฝํ์ด ๋ช ๋ฒ ์์์ง๋ง ๋ญ๊ฐ ์์ง ๊ฐ๋
์ด ๋ช
ํํ๊ฒ ์กํ์ง ์์๋ค๋ ์๊ฐ์ ๋ฑ๋
๋ฑ๋
Pagination ์ค์ต์ ์งํํ๊ฒ ๋์๋ค. ๋ด๊ฐ ์ ์ํ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค. (์ถ์ฒ ๋ด ๋จธ๋ฆฌ) 1. ํ
์คํธ ํํธ์ ํ
์คํธ๋ฅผ ํ ๊ธ์ ์
๋ ฅํ ๋ ๋ง๋ค ๊ฒฐ๊ณผ๊ฐ ๋ก๋๋๋ค. 2. ์
๋ ฅ ํ
์คํธ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ฐ์์จ๋ค. 3. UI๋ image๊ฐ ํ์ค์ 3๊ฐ์ฉ, API 1ํ ํธ์ถ ์ ๋ฐ์ดํฐ๊ฐ 20๊ฐ์ฉ ์ถ๊ฐ๋๋ค. 4. ๊ฐ์ฅ ์๋๋ก ์คํฌ๋กค ํ๋ฉด ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฌ์จ๋ค. 5. ์ด๋ฏธ์ง๋ ์บ์ฑ์ฒ๋ฆฌ๋์ด ์ดํ ํ์ํ ๊ฒฝ์ฐ ์บ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Moya๋ก Api ํธ์ถ์ ํ๊ณ , Kingfisher๋ก ์ด๋ฏธ์ง ๋ก๋์ ์บ์ฑ์ ์ฒ๋ฆฌํ๋ค. ์ค์ต์๋ Kakao Search Image API..