๐ŸŽ Apple

mutating์ด๋ž€?! ๊ฐ’ ํƒ€์ž…(๊ตฌ์กฐ์ฒด์™€ ์—ด๊ฑฐํ˜•)์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์—์„œ ์ž์‹  ๋‚ด๋ถ€์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ. ๊ตฌ์กฐ์ฒด ๋ฉ”์†Œ๋“œ์—์„œ ๊ตฌ์กฐ์ฒด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ˆ˜์ •ํ• ๋•Œ๋Š” mutating ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋˜์—ˆ์„๋•Œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ์Œ์„ ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. struct Person { var name = "ํ™๊ธธ๋™" mutating func changeName(name: String) { self.name = name } } var person = Person() var person2 = person // ์ฐธ์กฐ var person3 = person // ์ฐธ์กฐ p2.x = 3 //COW ์‹ค์ œ ๋ณต์‚ฌ๊ฐ€ ์ผ์–ด๋‚จ ๋” ์•Œ์•„๋ณผ๊นŒ์š”?! ๋ณดํ†ต ๊ฐ’ ํƒ€์ž…์˜ ํ”„๋กœํผํ‹ฐ๋Š” ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต..
SVG๋ฅผ SwiftUI์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์‚ฌ์ดํŠธ ์‚ฌ์šฉ๋ฒ•: ํ”ผ๊ทธ๋งˆ์—์„œ ๋„ํ˜• ์šฐํด๋ฆญ > Copy as SVG > ์‚ฌ์ดํŠธ์— ๋ถ™์—ฌ๋„ฃ๊ธฐ https://svg-to-swiftui.quassum.com/ JSON ์ฝ”๋“œ ํŒŒ์‹ฑํ•ด์ฃผ๋Š” ์‚ฌ์ดํŠธ ์‚ฌ์šฉ๋ฒ•: ์ฝ”๋“œ ๋ณต์‚ฌ ํ›„ ์‚ฌ์ดํŠธ ์™ผ์ชฝ ํ•„๋“œ์— ๋ถ™์—ฌ๋„ฃ๊ธฐ https://app.quicktype.io/
Swift์—์„œ๋Š” ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ ์˜์กด์„ฑ ์ฃผ์ž…์— ๋Œ€ํ•ด ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์•Œ์•„๋ด…์‹œ๋‹ค. ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ์‚ฌ์น™์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๊ฒ ์ฃ ? ์ด๋•Œ, ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋Šฅ๊ณผ ์‚ฌ์น™์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ๊ฐ ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ์ด ํด๋ž˜์Šค๋“ค์ด ์„œ๋กœ ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋˜๊ณ , ํ…Œ์ŠคํŠธ๋„ ๋”์šฑ ์‰ฌ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์ด์ฃ ! ์ด๋ฅผ ์œ„ํ•ด, ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœํ† ์ฝœ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. protocol NumberInput { func getNumber() -> Int } protocol ..
iOS์—์„œ API ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด http ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋  ๋•Œ๋„ ์žˆ์„ํ…๋ฐ, ์ด์ „๊นŒ์ง€๋Š” App Transport Security policy ๊ด€๋ จํ•œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด, Info.plist - App Transport Security Setting์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์„ฑํ•ด์„œ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐฐํฌํ•  ๋•Œ ๋ฆฌ์  ๋‹นํ•œ๋‹ค๋Š” ๋ง์„ ๋“ฃ๊ฒŒ ๋˜์—ˆ๋‹ค..! ์•„๋ฌด๋ ‡์ง€ ์•Š๊ฒŒ ์‚ฌ์šฉํ•ด์™”๋Š”๋ฐ, ๋ฐฐํฌํ•  ๋•Œ๋Š” ์„ค์ •์„ ์ž˜ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค! 1. ATS์— ๊ด€๋ จํ•˜์—ฌ Apple ํ”Œ๋žซํผ์—์„œ ์•ฑ ์ „์†ก ๋ณด์•ˆ(ATS)์ด๋ผ๋Š” ๋„คํŠธ์›Œํ‚น ๋ณด์•ˆ ๊ธฐ๋Šฅ์€ ๋ชจ๋“  ์•ฑ๊ณผ ์•ฑ ํ™•์žฅ์˜ ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ๋ฐ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์•ฑ์—์„œ ๋งŒ๋“  ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ์™€ ์•”ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ(TLS) ํ”„๋กœํ† ์ฝœ์— ์˜ํ•ด ๋ณดํ˜ธ๋˜๋„๋ก ..
Result ํƒ€์ž…์ด๋ž€ enum Result { case success(Success) case failure(Failure) } Generic Enumeration์œผ๋กœ ์„ ์–ธ๋˜์–ด success ๋˜๋Š” failure ๋‘๊ฐ€์ง€ case๋ฅผ ํฌํ•จํ•˜๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค. Result ํƒ€์ž…์€ ์„ฑ๊ณต๊ณผ ์‹คํŒจ์— ๋Œ€ํ•œ ๋ฐ˜ํ™˜๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ( = success์—๋Š” ์ž‘์—…์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ €์žฅ๋˜๊ณ , failure์—๋Š” ์—๋Ÿฌ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.) Failure๋Š” Error๋ฅผ ์ƒ์†๋ฐ›์€ ํƒ€์ž…์ด์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. Swift5์—์„œ๋ถ€ํ„ฐ Standard library์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฅ์  ๊ฐ€๋…์„ฑ ์ฆ๊ฐ€: ๊ฒฐ๊ณผ์˜ ์„ฑ๊ณต, ์‹คํŒจ ์—ฌ๋ถ€์™€๋Š” ์ƒ๊ด€์—†์ด ํ•˜๋‚˜๋กœ ๊ฒฐ๊ณผ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๊ธธ์ด ๋‹จ์ถ•: optional ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, unw..
Singleton ์—ฌ๋Ÿฌ ๊ฐ์ฒด์—์„œ ๊ณต์šฉ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ shared๋ผ๋Š” ์ด๋ฆ„์˜ ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. static ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ธ๋‹ค. ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ private์œผ๋กœ ๋งŒ๋“ค์–ด์„œ, ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ์‹œ ํ™˜๊ฒฝ์„ค์ • ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ฒ˜๋ฆฌ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ Singleton์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ๋ฐ์ดํ„ฐ ๊ณต์œ (ํ•˜๋‚˜์˜ ๊ฐ์ฒด ์ง€์†์  ์ฐธ์กฐ) ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ ์ฝ”๋“œ ์˜ˆ์‹œ class Singleton { static let shared: Singleton = Singleton() var numOfBook: Int private init() } Singleton.shared.numOfBook = 10 iOS์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์˜ ๊ฐ์ฒด let application = UIApplication.sh..
์นด์นด์˜ค์˜ ๋ธ”๋กœ๊ทธ ๊ฒ€์ƒ‰ API๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ๊ฒฐ๊ณผ๊ฐ’์— HTMLํƒœ๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ์ด๋ฅผ ์ง€์šฐ๊ณ  ์‹ถ์—ˆ๋‹ค! String์—์„œ "]+>|"" ์ด ์นœ๊ตฌ๋“ค์„ ์‚ญ์ œํ•ด์ฃผ๋ฉด ๋˜์—ˆ๋‹ค! ]+> ์ด ๋ถ€๋ถ„์ด html ํƒœ๊ทธ๋ฅผ ๊ฑฐ๋ฅด๋Š” ๋ถ€๋ถ„์ด๊ณ , " ์ด ๋ถ€๋ถ„์ด ์ •๊ทœํ‘œํ˜„์‹์„ ํ†ตํ•ด ๊ฑธ๋Ÿฌ์ง€์ง€ ์•Š๋Š” ๋ถ€๋ถ„์„ ๋˜ ํ•œ๋ฒˆ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ๋ถ€๋ถ„์ด๋‹ค func stripHTMLTags(from htmlString: String) -> String { var string = htmlString.replacingOccurrences(of: "]+>|"", with: "", options: .regularExpression, range: nil) return string } ํด๋ž˜์Šค ๋‚ด์— ์ด๋ ‡๊ฒŒ ๋ฉ”์„œ๋“œ๋กœ ์ž‘์„ฑํ•ด์ฃผ์—ˆ๊ณ , String์˜ Extension์œผ๋กœ ๊ตฌํ˜„ํ•ด๋„ ๋  ๋“ฏ..
dropFirst(_:) ์ง€์ •๋œ ๊ฐœ์ˆ˜์˜ ์ดˆ๊ธฐ ์š”์†Œ๋ฅผ ์ œ์™ธํ•˜๊ณ , ๋ชจ๋‘ ํฌํ•จ๋œ ์„œ๋ธŒ์‹œํ€€์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. func dropFirst(_ k: [Int]() = 1) -> Self.SubSequence k ์ปฌ๋ ‰์…˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ์‚ญ์ œํ•  ์š”์†Œ์˜ ์ˆ˜. k๋Š” 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์€ 1์ž…๋‹ˆ๋‹ค. removeFirst(_:) ์ปฌ๋ ‰์…˜์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ์ง€์ •ํ•œ ์ˆ˜์˜ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. mutating func removeFirst(_ k: Int) k ์ปฌ๋ ‰์…˜์—์„œ ์ œ๊ฑฐํ•  ์š”์†Œ์˜ ์ˆ˜. k๋Š” 0 ์ด์ƒ์ด์–ด์•ผ ํ•˜๋ฉฐ ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ์˜ ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์ฐจ์ด์  ์ด ๋‘ ๋ฉ”์„œ๋“œ์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ dropFirst๋Š” ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด์„œ ์›๋ณธ ๋ฐฐ์—ด์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๋ฐ˜๋ฉด, removeFirst๋Š” ์ฒซ ๋ฒˆ์งธ ..
JINiOS
'๐ŸŽ Apple' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)