Swift
-
[Swift] Understanding Swift Concurrency’s AsyncStreamSwift 2023. 8. 17. 09:25
์ด์ ๊ธ์์ ๊ธฐ์กด์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ async/await์ ํ์ฉํ๋ Swift์ ์๋ก์ด ๋์์ฑ ์์คํ ์ผ๋ก ์ฐ๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ์ต๋๋ค. ์ฌ๊ธฐ์ ์ค๋ช ํ ๋ฉ์ปค๋์ฆ์ ์ฝ๋๊ฐ ๋จ์ผ ๊ฐ์ผ๋ก ๋ชจ๋ธ๋งํ ์ ์๋ ๋จ์ผ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ ์ฝ๋์ ์ ํฉํฉ๋๋ค. ๋ค์ด๋ก๋ ์งํ๋ฅ , ์ฌ์ฉ์์ ํ์ฌ ์์น์ ๊ฐ์ด ์๊ฐ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ, ๋น๋๊ธฐ for ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณตํ ์ ์๋ AsyncSequence ๊ฐ์ฒด๋ก ๋ชจ๋ธ๋งํ ์ ์์ต๋๋ค. ์ด์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์์ ๋ก URL์ lines ์์ฑ์ ๋ค ์ ์์ต๋๋ค. let url = URL(string: "")! for try await line in url.lines { // use line } ๊ทธ๋ ๋ค๋ฉด ์ปค์คํ ๋น๋๊ธฐ ์ํ์ค๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์ผ๊น์?..
-
[Swift] Wrapping existing asynchronous code in async/await in SwiftSwift 2023. 8. 17. 09:21
Swift์ async/await ๊ธฐ๋ฅ์ iOS 13 ๋ฐ ์ดํ ๋ฒ์ ์์ ๋น๋๊ธฐ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๋ ๋๋ผ์ด ๋ฐฉ๋ฒ์ ๋๋ค. ์ ํ๋ก์ ํธ์์๋ ์ด๋ก ์ธํด ๋ ํํ๋ ฅ์ด ์๊ณ ๊ฐ๋ ์ฑ์ด ์ข์ผ๋ฉฐ ๋๋ฒ๊น ํ๊ธฐ ์ฌ์ด ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋๊ธฐ ์ฝ๋์ ๋งค์ฐ ์ ์ฌํ๊ฒ ์ฝํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ async/await๋ฅผ ์ฑํํ๋ ๊ฒ์ ํจ์์ ์๋ฃ ํธ๋ค๋ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋น๋๊ธฐ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์๋นํ ๋ณ๊ฒฝํด์ผ ํ ์๋ ์์ต๋๋ค. ๋คํํ๋, ๊ธฐ์กด์ ์ฝ๋ฐฑ ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์๋ก์ด async/await ์ธ๊ณ๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํด Swift์ ๋ด์ฅ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ ๊ธฐ์กด์ ์ฝ๋ฐฑ ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ฝ๋๋ฅผ async ๋ฐ async/await์ ํจ๊ป ์๋ํ๋ ํจ์๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ ์ค ํ๋..
-
[Swift] Any and AnyObjectSwift 2023. 5. 8. 01:36
์ด๋ฒ ์๊ฐ์๋ Swift์์ ์ ๊ณตํ๋ ๋ฒ์ฉ ์๋ฃํ์ธ Any, AnyObject์ ๋ํด์ ์์๋ณด๋๋ก ํฉ์๋ค! ๋ฒ์ฉ ์๋ฃํ์ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ ์ฐ์ฑ์ ๋์ผ ์ ์์ง๋ง, ๋จ์ฉํ ๊ฒฝ์ฐ ๊ฐ๋ ์ฑ์ด ๋ฎ์์ง๋๋ค. ๋ฒ์ฉ ์๋ฃํ์๋ Any, AnyObject๊ฐ ์์ต๋๋ค. Any๋ก ์์ํ๋ ํ์ ์ Type Erased (Erasing) Wrapper๋ผ๊ณ ํ๋๋ฐ, ์ด๋ฆ ๊ทธ๋๋ก Type์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์๋ ํ์ ์ ๋๋ค. Type์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Type Casting์ด ํ์ํฉ๋๋ค. 1. Any ํ์ ์ Any๋ก ์ ์ธํ๋ฉด, ํ์ ์ ๊ด๊ณ์์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ์๋์ ๊ฐ์ด ์ง์ Type Annotation์ผ๋ก ์ ์ฅํ ์๋ ์๊ณ , Type Casting์ ํ๋ ๊ฒ..
-
[Swift] ์ฌ์ฉ์ ์ ์ ์ฐ์ฐ์ (Custom Operator)Swift 2023. 5. 3. 00:37
์๋ ํ์ธ์! ์ด๋ฒ ์๊ฐ์๋ ์ฌ์ฉ์ ์ ์ ์ฐ์ฐ์๋ฅผ ๋ง๋ค์ด๋ณด๋๋ก ํ ๊ฒ์. C, C++๋ Java ๋ฑ์๋ ์ฆ๊ฐ์ฐ์ฐ์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํ๊ฒ ++, -- ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด Swift์๋ ์ฆ๊ฐ์ฐ์ฐ์๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค. Swift 3์์ deprecated ๋์๊ธฐ ๋๋ฌธ์ด์ฃ ๐ฅฒ ํ์ง๋ง ๊ด์ฐฎ์ต๋๋ค! Swift์์๋ ์ ํฌ๊ฐ ์ง์ ์ฐ์ฐ์ ๊ธฐํธ๋ฅผ ์ถ๊ฐํด์ ์ฌ์ฉ์ ์ ์ ์ฐ์ฐ์๋ฅผ ๋ง๋ค ์ ์๊ฑฐ๋ ์ใ ใ ์ ๋ 5++๋ฅผ ํ๋ฉด 1์ด ์ฆ๊ฐ๋์ด 6์ด ๋๋๋ก ํ๋ ํ์ ์ฆ๊ฐ ์ฐ์ฐ์ (++) ์ ํ๋ผ๋ฏธํฐ๋ก 2๊ฐ์ ์ซ์๋ฅผ ์ ๋ฌ๋ฐ์์ ๋ ๊ฐ์ ์ซ์๋ฅผ ๊ฐ๊ฐ ๊ณฑํ๊ณ , ๋๋ ๊ฐ์ ๋ํ๋ ์ญํ ์ ํ๋ ์ค์ ์ฐ์ฐ์ (*+/)๋ฅผ ๋ง๋ค์ด๋ณผ๊ฑฐ์์! ์ฌ์ฉ์ ์ ์ ์ฐ์ฐ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค. ๋จผ์ ์ฐ์ฐ์์ ์์น์ ์ฐ์ฐ์๋ก ์ฌ์ฉํ ํน์๋ฌธ์..
-
[Swift] [SceneConfiguration] Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)") ์ด์ ํด๊ฒฐSwift 2023. 4. 4. 18:31
์๋ฎฌ๋ ์ดํฐ์์๋ ๋์ค์ง ์์์ง๋ง, ์ค ๊ธฐ๊ธฐ์์ ์คํํ๋ ๋์ค๋ ๊ฒฝ๊ณ ๋ฉ์์ง! [SceneConfiguration] Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)") ์ฐพ์๋ณด๋ Scene์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋์ค๋ ๊ฒ ๊ฐ์๋ฐ, ์๋์ ๊ฐ์ด Info.plist๋ฅผ ์์ ํ๋ฉด ๋๋ค. 1) Tuist ์ฌ์ฉ ์ [ "UIApplicationSceneManifest": [ "UIApplicationSupportsMultipleScenes": false, "UISceneConfigurations": [:] ] ] 2) Info.plist ์์ค ์ฝ๋ ์ง์ ์์ ์ UIApplication..
-
[๊ธฐํ] ์ ๊ท ํํ์ (Regex)Swift 2022. 3. 31. 14:46
์ ๊ท ํํ์์ ํน์ ํ ๊ท์น์ ๊ฐ๋ ๋ฌธ์์ด์ ํํํ๊ฑฐ๋ ๊ฒ์ํ ๋, ๊ทธ๋ฆฌ๊ณ ํน์ ๋ฌธ์์ด์ ๋ํ ๊ฒ์ฆ์ด ํ์ํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด ํ ์คํธ ์๋ํฐ์์ ๋ฌธ์์ด์ ๊ฒ์ํ์ฌ ์นํํ๊ฑฐ๋ ์์ด๋/๋น๋ฐ๋ฒํธ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ ๋ ์ฌ์ฉํ๋ค. ์ ๊ท ํํ์์์ ์ฌ์ฉ๋๋ ๊ธฐํธ๋ฅผ Meta ๋ฌธ์๋ผ๊ณ ํ๋๋ฐ, ํํ์์์ ๋ด๋ถ์ ์ผ๋ก ํน์ ์๋ฏธ๋ฅผ ๊ฐ๋ ๋ฌธ์๋ฅผ ๋งํ๋ฉฐ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ํํ์ ์๋ฏธ ^x ๋ฌธ์์ด์ ์์์ ๋ํ๋ด๋ฉฐ x ๋ฌธ์๋ก ์์๋จ x$ ๋ฌธ์์ด์ ์ข ๋ฃ๋ฅผ ๋ํ๋ด๋ฉฐ x ๋ฌธ์๋ก ์ข ๋ฃ๋จ .x ์์์ ํ ๋ฌธ์์ ์๋ฆฌ์๋ฅผ ๋ํ๋ด๋ฉฐ ๋ฌธ์์ด์ด x ๋ฌธ์๋ก ๋๋จ x+ ๋ฐ๋ณต์ ๋ํ๋ด๋ฉฐ x ๋ฌธ์๊ฐ 1๋ฒ ์ด์ ๋ฐ๋ณต๋จ x? ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ฉฐ x ๋ฌธ์๊ฐ ์กด์ฌํ ์๋, ์กด์ฌํ์ง ์์ ์๋ ์์ x* ๋ฐ๋ณต ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ฉฐ x ๋ฌธ์๊ฐ 0๋ฒ..
-
[Swift] Key Value Observing (KVO)Swift 2022. 3. 24. 09:32
Key Value Observing (KVO) A ๊ฐ์ฒด์์ B ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋ณํ๋จ์ ๊ฐ์งํ ์ ์๋ ํจํด KVO ํจํด์ ๊ฐ์ฒด์ ๊ฐ์ฒด ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ ํฉํ๋ค. ๋ฉ์๋๋ ๋ค๋ฅธ ์ก์ ์์ ๋ํ๋๋ ๊ฒ์ด ์๋ ํ๋กํผํฐ์ ์ํ์ ๋ฐ์ํ๋ ํํ์ด๋ค. ํ์ ์ ์ ์ธ๋ถ์ ์ต์ ๋ฒ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ ์ธํ๋ฉด, property observer (willSet, didSet)๊ณผ ์ ์ฌํ๋ค. Dynamic Dispatch ํค ํจ์ค (KeyPath = \.) ์ด๋ฆ์ ํตํด ํ๋กํผํฐ์ ์ฃผ์ ์ฐพ๋ ๊ธฐ๋ฅ ํค ํจ์ค๋ ํ๋กํผํฐ๋ ๋ฉ์๋ ๋ฑ์ ํน์ ๋ฌธ์์ด๋ก ํ๊ธฐํ๋ ๊ท์น์ด๋ค. ์ฌ์ฉ๋ฒ 1. ์ ์ธ class Person: NSObject { @objc dynamic var name = "Selina" } 2. observe() ํธ์ถํ์ฌ..
-
[Swift] Type Alias (typealias) (ํ์ ๋ณ์นญ ์ ์ธ)Swift 2022. 3. 23. 09:45
ํ์ ๋ณ์นญ ์ ์ธ (Type alias Declaration) ์ด๋, ๊ธฐ์กด ํ์ ์ ๋ํ ์๋ก์ด ์ด๋ฆ์ ํ๋ก๊ทธ๋จ์ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค. typealias ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค. type alias๊ฐ ์ ์ธ๋๊ณ ๋๋ฉด, ์๋กญ๊ฒ ์์ฑ๋ ์ด๋ฆ (name)์ ๊ธฐ์กด ํ์ (exisisting type) ๋์ ์ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋ ์ ์๋ค. ๊ธฐ์กด ํ์ ์ ๋ช ๋ช ๋ ํ์ (named type) ๋๋ ๋ณตํฉ ํ์ (compound type) ์ผ ์ ์๋ค. Type alias๋ ์ ํ์ ์ ๋ง๋๋ ๊ฒ์ด ์๋, ๋จ์ํ ๊ธฐ์กด์ ์กด์ฌํ๋ ํ์ ์ ์ฐธ์กฐํ ์ ์๋๋ก ์๋ก์ด ์ด๋ฆ์ ํ์ฉํ๋ ๊ฒ์ด๋ค. type alias ์ ์ธ์ generic parameter๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ์กด์ generic type์ ์ด๋ฆ์ ๋ถ์ผ ์ ์๋ค..