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์ ํจ๊ป ์๋ํ๋ ํจ์๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ ์ค ํ๋..
-
[iOS] Cocoapods ์ค์น ๋ฐ ์ฌ์ฉ๋ฒiOS 2023. 5. 30. 16:03
์ด๋ฒ ํฌ์คํ ์์๋ Cocoapods ์ค์น ๋ฐ ์ฌ์ฉ๋ฒ์ ๋ํด์ ์์๋ณด๋๋ก ํ ๊ฒ์! ๋จผ์ Cocoapods๋ ๋ฌด์์ผ๊น์? ๊ณต์๋ฌธ์์๋ ์๋์ ๊ฐ์ด ๋์์์ด์! Cocoapods๋ Swift์ Objective-C Cocoa ํ๋ก์ ํธ์ ์ข ์ ๊ด๋ฆฌ์์ ๋๋ค. 84000๊ฐ๊ฐ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ง๋ฉฐ, 3๋ฐฑ๋ง ๊ฐ ์ด์์ ์ฑ์์ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. Cocoapods๋ ํ๋ก์ ํธ๋ฅผ ์ฐ์ํ๊ฒ ํ์ฅํ๋๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค. ์ฝ์ฝ์ํ์ ๋ง ๊ทธ๋๋ก ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ ๋ชจ๋์ ์๋ฏธํฉ๋๋ค. ๋จผ์ Cocoapods๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ ์ค์นํด์ฃผ์ด์ผํด์. ํฐ๋ฏธ๋์ ์คํํด๋ด ์๋ค. command + ์คํ์ด์ค๋ฐ๋ฅผ ๋๋ฅด๊ณ terminal์ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค. ๋๋ ์ด๋ ๊ฒ Launchpad์..
-
[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๊ฐ์ ์ซ์๋ฅผ ์ ๋ฌ๋ฐ์์ ๋ ๊ฐ์ ์ซ์๋ฅผ ๊ฐ๊ฐ ๊ณฑํ๊ณ , ๋๋ ๊ฐ์ ๋ํ๋ ์ญํ ์ ํ๋ ์ค์ ์ฐ์ฐ์ (*+/)๋ฅผ ๋ง๋ค์ด๋ณผ๊ฑฐ์์! ์ฌ์ฉ์ ์ ์ ์ฐ์ฐ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค. ๋จผ์ ์ฐ์ฐ์์ ์์น์ ์ฐ์ฐ์๋ก ์ฌ์ฉํ ํน์๋ฌธ์..
-
[iOS] SwiftLint ์ ์ฉํ๊ธฐiOS 2022. 5. 10. 16:59
SwiftLint๋? SwiftLint๋ ์ฝ๋์ ์คํ์ผ ์ค๋ฅ๋ฅผ ํ์ํ๋๋ฐ ๋์์ด ๋๋ ์ ์ํ ์ฝ๋ ์คํ์ผ ๋ถ์ ๋๊ตฌ์ด๋ค. ์คํ์ผ์ ๋ฐ๋ฅด์ง ์์ ๋, ๋น๋๋ฅผ ์คํจ๋ก ํ์ํ๊ฑฐ๋ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ์ฌ ์คํ์ผ์ ์ ์ฉํ๋๋ฐ ๋์์ ์ค๋ค. 1. ์ฝ์ฝ์ํ ์ค์นํ๊ธฐ pod 'SwiftLint' 2. Script ์ถ๊ฐํ๊ธฐ Target → Build Phase → + → New Run Script Phase Run Script์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค. ${PODS_ROOT}/SwiftLint/swiftlint ๊ทธ๋ฆฌ๊ณ Run Script ์ด๋ฆ์ SwiftLint Script๋ก ๋ณ๊ฒฝํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์น๋ฅผ Compile Sources ์๋ก ์ฌ๋ ค์ฃผ์๋ค! ์ด๋ ๊ฒ ํ๋ฉด, ์ปดํ์ผ ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด์ SwiftLint ๋ฃฐ ๊ฒ์ฌ๋ฅผ ๋จผ์ ์ง..
-
[iOS] Xcode 13.3, Swift 5.6 warning on self (์๋ฌธ ํด๊ฒฐ ๋ชปํจ)iOS 2022. 4. 6. 15:18
button์ addTarget์ ํ๊ณ target์ self๋ฅผ ๋ฃ์ด์ฃผ์๋๋ ์๋์ ๊ฐ์ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ณผ ์ ์์๋ค. 'self' refers to the method 'ViewController.self', which may be unexpected ์ฌ๊ธฐ์ Fix ๋ฒํผ์ ๋๋ฅด๋ฉด Xcode๊ฐ ViewController.self๋ก ๋ณ๊ฒฝํด์ฃผ๋๋ฐ, ์ด๋ ๊ฒ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ ๋ฐ์ํ ๊น??????? ์ด๊ฑด ์ง๋ฌธ์ ํ๋ฒ ํด๋ด์ผํ ๊ฒ ๊ฐ๋ค.. ์ผ๋จ ํด๊ฒฐ ๋ฐฉ๋ฒ์ self๋ฅผ ViewController.self๋ก ๋ฐ๊พธ๋ผ๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ณด์ง ์์ผ๋ ค๋ฉด, private let์ lazy var๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค. https://samwize.com/2022/03/21/swift-5-6-warning-on-self/
-
[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() ํธ์ถํ์ฌ..