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..
๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ
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์ ์ ์ ์ ๋์์ ํตํด ๋ค์ด์จ ๋ฐ์ด..
์ค์ผ์ค๋ง? ํ๋์ ๊ด๋ฆฌ์๋ก ํ๋ก์ธ์ค๋ค์ ์ฌ๋ฌ ์ํฉ์ ๊ณ ๋ คํ์ฌ cpu์ ์์คํ
์์์ ์ด๋ป๊ฒ ๋ฐฐ์ ํ ์ง ๊ฒฐ์ ํ๋ ์ญํ ์ ํจ - ๊ณ ์์ค ์ค์ผ์ค๋ง (๊ฐ์ฅ ํฐ ํ์์ ์ด๋ฃจ์ด์ง๋ ์ค์ผ์ค๋ง) ์ด๋ค ์์
์์ฒญ์ด ์ค๋ฉด ์ค์ผ์ค๋ฌ๊ฐ ์์คํ
์ ์ํฉ์ ๊ณ ๋ คํ์ฌ ์์
์ ์น์ธํ ์ง, ๊ฑฐ๋ถํ ์ง ๊ฒฐ์ ํจ(์น์ธ ์ค์ผ์ค๋ง ์ด๋ผ๊ณ ๋ ํจ) - ์ค๊ฐ์์ค ์ค์ผ์ค๋ง ์ ์ฒด ์์คํ
์ ํ์ฑํ๋ ํ๋ก์ธ์ค ์๋ฅผ ์กฐ์ ํ์ฌ ๊ณผ๋ถํ๋ฅผ ๋ง์ - ์ ์์ค ์ค์ผ์ค๋ง ์ด๋ค ํ๋ก์ธ์ค์ CPU๋ฅผ ํ ๋นํ๊ณ ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ๋๊ธฐ ์ํ๋ก ๋ณด๋ผ์ง ๋ฑ์ ๊ฒฐ์ ํจ ์์ฃผ ์งง์ ์๊ฐ์ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋จ๊ธฐ ์ค์ผ์ค๋ง์ด๋ผ๊ณ ๋ ํจ ์ค์ผ์ค๋ง์ ๋ชฉ์ ๊ทผ๋ณธ์ ์ผ๋ก ์ด๋ฐ ์ค์ผ์ค๋ง์ ์ ํ ๊น? ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๊ณตํํ๊ฒ ์์
ํ๋๋ก ํ๊ธฐ ์ํด์์ด๋ค. ์์ฒญ๋๊ฒ ์ค๋ ๊ฑธ๋ฆฌ๋ ํ๋ก์ธ์ค๋ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋์ ์ผ๋ก ์งง..
ํด๋ฆฐ์ฝ๋ ๋
ํ๊ฐ .. :) ๋๋ณด๊ธฐ ํด๋ฆฐ์ฝ๋๋ฅผ ์ฝ๊ณ ๋ ์ข์ ์ฝ๋์ ๊ด์ฌ์ด ์๊ธฐ๊ฒ ๋์๋ค. ๊ธฐ์กด ๊ฐ๋ฐ ๋ฐฉ์์ ๊ตฌํ์ ์์ฃผ๋ก ๊ณ ๋ฏผ์ ํ์๋๋ฐ, ํด๋ฆฐ์ฝ๋์ ๋์จ ๋ด์ฉ์ ๋ด ํ๋ก์ ํธ์ ์ง์ ์ ์ฉํด๋ณด๋ ๊ณผ์ ์ ํตํด ๋ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ถ๋ค๋ ๊ณ ๋ฏผ์ ํ๊ฒ ๋์๋ค. ํด๋ฆฐ์ฝ๋์ ๋์์๋ ๋ด์ฉ๋ค์ด ์ ๋ถ ๋ค ๋ง๋ ๋ง์ด๋ผ๊ณ ์๊ฐํ์ง ์๋๋ค. ์ํฉ์ ๋ฐ๋ผ ์ข์ง ๋ชปํ ๋ฐฉ๋ฒ, ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด ํจ์จ์ ์ผ ์ ์๊ณ , ํจ์จ์ ์ธ, ๋ค๋ฅธ์ฌ๋๋ค์ด ์ ํธํ๋ ๊ทธ๋ฐ ๋ฐฉ์๋ค์ด ๋นํจ์จ์ ์ผ ์ ์๋ค. ์๋ฅผ๋ค์ด ์ด๋ค ๋ฌ๋์ปค๋ธ๊ฐ ๋์ ์ํคํ
์ฒ๋ฅผ ๋์
ํ๊ธฐ ์ํด ํ์๋ค์ด ๋ง์ ์๊ฐ๊ณผ ๋
ธ๋ ฅ์ ์๋นํด์ผ ํ๋ค๋ฉด, ๊ทธ๋ฐ๋ฐ ์ด ๋ ํ๋ก์ ํธ ๊ธฐํ์ด ์งง๋ค๋ฉด ๊ณผ์ฐ ๊ทธ ์ํคํ
์ฒ๋ฅผ ๋์
ํ๋๊ฒ ์ฌ๋ฐ๋ฅธ ์ ํ์ผ๊น? ํ์ฌ์ ๋๋ ์ฌ๋ฐ๋ฅด์ง ์๋ค๊ณ ์๊ฐํ๋ค. ์ข์ ์ํคํ
์ฒ, ๊ณ ๋ฏผ..