๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŽ iOS32

[RxSwift] Observable Observable ์ด๋ž€?Observable์€ RxSwift์—์„œ ๋ฐ์ดํ„ฐ์˜ ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋งํ•˜์ž๋ฉด, Observable์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐฉ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ’๋“ค์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์‘๋‹ต, ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋“ฑ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Observable์€ ์„ธ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ถœํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” next, error, completed์ž…๋‹ˆ๋‹ค.nextObservable์ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์š”์†Œ๋ฅผ ๋ฐฉ์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.Observable์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ next ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.error์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฐฉ์ถœ๋˜๋ฉฐ, ์ดํ›„์—๋Š” ๋” ์ด์ƒ์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.completedObservable์ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์š”์†Œ์˜ ๋ฐฉ์ถœ์„ ์™„๋ฃŒ.. 2024. 6. 7.
[RxSwift] RxSwift๋ž€? iOS ๊ฐœ๋ฐœ์ž๋ผ๋ฉด RxSwift์— ๋Œ€ํ•ด ๋“ค์–ด๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. RxSwift๋Š” Swift ์–ธ์–ด์— ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋„์ž…ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” RxSwift์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๊ณ , iOS ๊ฐœ๋ฐœ์—์„œ RxSwift๊ฐ€ ์–ด๋–ป๊ฒŒ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.RxSwift๋ž€?RxSwift๋Š” ๋น„๋™๊ธฐ์ ์ด๊ณ  ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์˜ ์ฝ”๋“œ๋ฅผ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์‹œํ€€์Šค์™€ ํ•จ์ˆ˜ํ˜• ์Šคํƒ€์ผ์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. RxSwift๋Š” ReactiveX (Reactive Extensions) ํŒจ๋ฐ€๋ฆฌ์˜ ์ผ๋ถ€๋กœ, ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์ธ๊ธฐ ์žˆ๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ๊ฐœ๋…ObservableRxSwift์˜ ํ•ต์‹ฌ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.Observable์€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ด.. 2024. 6. 3.
[SwiftUI] Text Text A view that displays one or more lines of read-only text ํ•œ ์ค„ ์ด์ƒ์˜ ์ฝ๊ธฐ ์ „์šฉ text๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ทฐ์ž…๋‹ˆ๋‹ค. Text ๋ทฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ํ‘œ์‹œํ•  ํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. import SwiftUI struct ContentView: View { var body: some View { Text("Hello, SwiftUI!") } } ํ…์ŠคํŠธ ์Šคํƒ€์ผ ์ ์šฉํ•˜๊ธฐ .font()๋ฅผ ์‚ฌ์šฉํ•ด ํ…์ŠคํŠธ์˜ ๊ธ€๊ผด ํฌ๊ธฐ์™€ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Text("Hello, SwiftUI!") .font(.title) .title, .caption ๋“ฑ ์‚ฌ์ „์— ์ •์˜๋œ ํ…์ŠคํŠธ ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Text("Hello, SwiftUI!") .font(.system(s.. 2024. 4. 18.
[SwiftUI] Stack (VStack/HStack/ZStack) Stack ๋ทฐ๋ฅผ ์ˆ˜์ง ๋˜๋Š” ์ˆ˜ํ‰์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค. Stack์„ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ทฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VSatck ๋ทฐ๋ฅผ ์ˆ˜์ง์œผ๋กœ ์Œ“๋Š” ์Šคํƒ์ž…๋‹ˆ๋‹ค. ์„ ์–ธ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ทฐ๋“ค์€ ์œ„์—์„œ ์•„๋ž˜๋กœ ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. import SwiftUI struct ContentView: View { var body: some View { VStack { Text("First View") Text("Second View") Text("Third View") } } } Alignment VStack์—์„œ alignment ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•˜์œ„ ๋ทฐ์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .leading์„ ์„ ํƒํ•˜๋ฉด ์™ผ์ชฝ์„ ๊ธฐ์ค€์œผ๋กœ, .trailing์„ ์„ ํƒํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ์„ ๊ธฐ์ค€์œผ๋กœ, .cente.. 2024. 4. 8.
[SwiftUI] Property Wrappers Property Wrappers property wrapper๋Š” ํ”„๋กœํผํ‹ฐ์— custom ํ•œ ๋™์ž‘์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๋ž˜ํ•‘ ํ•˜์—ฌ ์ถ”๊ฐ€ ๋กœ์ง์ด๋‚˜ ๋™์ž‘์„ ์บก์Аํ™” ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ, ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @State view์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. view ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ž๋™์œผ๋กœ view๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋ณ€ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰๋˜๋ฉฐ, ๋ทฐ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํ•ด๋‹น ๊ฐ’์ด ์ดˆ๊ธฐํ™”๋˜๊ณ , ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ ๋˜๋Š” ์™ธ๋ถ€ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ทฐ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— private์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. import SwiftUI struct ContentView: View { @State private va.. 2024. 4. 4.
[๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ] ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ž€? ๋น„๋™๊ธฐ(Asynchronous) ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด๋ž€ ์ž‘์—…์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๊ฐ ์ž‘์—… ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š” ์—†์ด ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—…(task)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์€ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋”๋ผ๋„ ๊ทธ ์‹œ๊ฐ„ ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์–ด ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋™๊ธฐ ๋ฐฉ์‹๋ณด๋‹ค ๋ณต์žกํ•˜๊ณ  task์˜ ์‹คํ–‰์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ฝ”๋“œ ๋‚˜์ค‘์— ์•Œ ์ˆ˜ ์—†๋Š” ์‹œ๊ฐ„์— ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ๋ฐ”๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Œ ์ดํ›„ ๋ผ์ธ์— ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ง‰์ง€ ์•Š์Œ ๋ณดํ†ต ํด๋กœ์ €๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์‹œ์ ์„ ์•Œ๋ ค์คŒ completionHandler ํ˜น์€ completi.. 2023. 9. 18.
๋ฐ˜์‘ํ˜•