reason: 'Don't know about flushed view

iOS์—์„œ addSubView ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ๋ทฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ์„œ๋ธŒ๋ทฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์—ˆ๊ฑฐ๋‚˜, ์ด์ „์— ๋‹ค๋ฅธ ๋ทฐ์— ์ถ”๊ฐ€๋˜์—ˆ์„ ๊ฒฝ์šฐ, addSubView๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด๋ฏธ ์ œ๊ฑฐ๋œ ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋ทฐ๊ฐ€ ์•„์ง ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์Šˆํผ ๋ทฐ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ทฐ๋ฅผ ๋ณด์ด๊ฒŒ ํ•˜๊ฑฐ๋‚˜ setNeedsDisplay ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ทฐ๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋„๋ก ์ง€์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋ทฐ๊ฐ€ ์Šˆํผ ๋ทฐ์™€ ์ด๋ฏธ ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ„์ธต ๊ตฌ์กฐ์— ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์Šˆํผ ๋ทฐ์™€ ์ƒ๊ด€์—†๋Š” ๋ทฐ๋ฅผ ๋งŒ๋“ค๋ ค๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋ทฐ..

  • textsms

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด(Decorator Pattern)

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด(Decorator Pattern)์ด๋ž€? ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ๊ธฐ์กด์˜ ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ์ฒด์˜ ์ฑ…์ž„๊ณผ ์—ญํ• ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด ์œ ์—ฐ์„ฑ์ด ๋†’์€ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์˜ ๊ตฌ์„ฑ์š”์†Œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. Component: ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์—์„œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•  ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ConcreteComponent: Component ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. Decorator: Component ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•  ๊ฐ์ฒด์˜ ์ถ”์ƒ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ConcreteDecorator: Decorator ํด..

  • textsms

์–ด๋Œ‘ํ„ฐ ํŒจํ„ด(Adapter Pattern)

์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ํŒจํ„ด์œผ๋กœ, ์‹ค์ œ๋กœ ๋งŽ์€ ๊ฒฝ์šฐ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. // ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ธํ„ฐํŽ˜์ด์Šค class ExternalLib { func doSomethingComplicated() { // ... } } // ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•  ์ธํ„ฐํŽ˜์ด์Šค protocol MyLib { func doSomethingSimple() } // ์–ด๋Œ‘ํ„ฐ..

  • textsms
Swift5.0 ํ–ฅํ›„ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ๋Š” Enum(์—ด๊ฑฐํ˜•) switch @unknown ์†์„ฑ ์ฒ˜๋ฆฌ SE-0192

Swift5.0 ํ–ฅํ›„ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ๋Š” Enum(์—ด๊ฑฐํ˜•) switch @unknown ์†์„ฑ ์ฒ˜๋ฆฌ SE-0192

์•ˆ๋…•ํ•˜์„ธ์š”~! ์˜ค๋Š˜์€ Enum์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ ค๊ณ  ํ•˜๋Š”๋ฐ์š”. ์ด๋ฒˆ Swift5.0์—์„œ ์ถ”๊ฐ€๋œ @unknown ์†์„ฑ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๊ฐ™์ด ๋ณด์‹œ์ฃ ~! ๋ณดํ†ต Enum๊ฐ’ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ์‹œ Switch๋ฌธ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ์š”. enum์— ์žˆ๋Š” ๋ชจ๋“  case๋“ค์„ ๋ฌด์กฐ๊ฑด ์ฒ˜๋ฆฌ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. @unknown ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š” ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํŒจ์Šค์›Œ๋“œ ์ž…๋ ฅ์‹œ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋Š” ์—๋Ÿฌ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ enum์œผ๋กœ ํ‘œํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค enum PasswordError: Error { case short case obvious case simple } ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. func showPasswordError(_ error: ..

  • textsms
Swift 5.0 Result Type ์†Œ๊ฐœ (์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ์‰ฝ๊ณ  ๊น”๋”ํ•˜๊ฒŒ ๊ฒฐ๊ณผ๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ SE-0235)

Swift 5.0 Result Type ์†Œ๊ฐœ (์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ์‰ฝ๊ณ  ๊น”๋”ํ•˜๊ฒŒ ๊ฒฐ๊ณผ๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ SE-0235)

์•ˆ๋…•ํ•˜์„ธ์š”~! ์˜ค๋Š˜์€ ์ƒˆ๋กญ๊ฒŒ ์†Œ๊ฐœ๋œ Result Type์„ ์†Œ๊ฐœํ•ด ๋“œ๋ฆฌ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. Result Type์€ ์•„๋ž˜ ์ฝ”๋“œ ์ฒ˜๋Ÿผ enum์œผ๋กœ ์„ ์–ธ ๋˜์–ด์žˆ๊ณ  ์„ฑ๊ณต๊ณผ, ์‹คํŒจ๋ฅผ Generic์œผ๋กœ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํŒจ๋Š” ๋ฌด์กฐ๊ฑด ์—๋Ÿฌ ํƒ€์ž…์ด๊ตฌ์š” @frozen enum Result where Failure : Error ๊ธฐ์กด์˜ ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๊ฐœ์„ ํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ๋ช…ํ™•ํžˆ ๋ฐ›๊ธฐ ์œ„ํ•ด Result Type์ด ๋‚˜์™”๋‹ค๊ณ  ๋ณด์—ฌ์ง€๋Š”๋ฐ์š”. ์™œ ๊ทธ๋Ÿฐ์ง€ ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํ•จ๊ป˜ ๋ณด์‹œ์ฃ ~! ์•„๋ž˜ ์ฃผ๋ฌธ์„ ๋ฐ›๋Š” ๋ฐ›์•˜์„ ๋•Œ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์—๋Ÿฌ๋ฅผ ์ •์˜ ํ–ˆ์Šต๋‹ˆ๋‹ค. enum OrderError: Error { case LackOfMoney } ๋ฉ”๋‰ด๋Š” ํ–„๋ฒ„๊ฑฐ๊ฐ€ ์ข‹์„๊ฑฐ ๊ฐ™์•„์š”. ํ–„๋ฒ„๊ฑฐ ์ข…๋ฅ˜์™€ ์ข…๋ฅ˜์— ๋”ฐ๋ฅธ ๊ฐ€๊ฒฉ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. enum Hamb..

  • textsms
Swift5.0 Character Properties (๋„์–ด์“ฐ๊ธฐ, ๊ณต๋ฐฑ, ์ˆซ์ž, ์†Œ๋ฌธ์ž ๋“ฑ๋“ฑ.. ํ™•์ธ ๊ฐ€๋Šฅํ•ด์š”) SE-0221

Swift5.0 Character Properties (๋„์–ด์“ฐ๊ธฐ, ๊ณต๋ฐฑ, ์ˆซ์ž, ์†Œ๋ฌธ์ž ๋“ฑ๋“ฑ.. ํ™•์ธ ๊ฐ€๋Šฅํ•ด์š”) SE-0221

์•ˆ๋…•ํ•˜์„ธ์š” Swif5.0 Character ํƒ€์ž…์— ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ Properties์„ ์†Œ๊ฐœํ•ด ๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค~!! ์–ด๋–ค๊ฒƒ๋“ค์ด ์ถ”๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ ํ•จ๊ป˜ ๋ณด์‹œ์ฃ ~! ๊ทธ ์ „์— Character ํƒ€์ž…์ด ๋ฌด์—‡์ธ์ง€ ์งง๊ฒŒ ์†Œ๊ฐœ ํ•ด๋“œ๋ฆฌ๋ ค๊ณ  ํ•˜๋Š”๋ฐ์š”~! ๋ง ๊ทธ๋Œ€๋กœ '๋ฌธ์ž'๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์–ด๋‚˜ ๋ฌธ์žฅ์ฒ˜๋Ÿผ ๋ฌธ์ž์˜ ์ง‘ํ•ฉ(์˜ˆ: dog)์ด ์•„๋‹ˆ๋ผ ๋‹จ ํ•˜๋‚˜์˜ ๋ฌธ์ž(์˜ˆ: d)๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค ์œ ๋‹ˆ์ฝ”๋“œ์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ์–ธ์–ด, ํŠน์ˆ˜๋ฌธ์ž ๋“ฑ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ Properties ์ž…๋‹ˆ๋‹ค. .isASCII ASCII ๋ฌธ์ž๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. let aCharacter = Character("A") let piCharacter = Character("π") aCharacter.isASCII // true piCharacter...

  • textsms
Swift 5.0 ์œ ๋‹ˆ์ฝ”๋“œ ์Šค์นผ๋ผ ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€ (Unicode Scalar Properties) SE-0211

Swift 5.0 ์œ ๋‹ˆ์ฝ”๋“œ ์Šค์นผ๋ผ ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€ (Unicode Scalar Properties) SE-0211

์•ˆ๋…•ํ•˜์„ธ์š”~! Swift 5.0์—์„œ Unicode Scalar์— properties๊ฐ€ ์ถ”๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ์š” ์–ด๋–ค ํŠน์ง•๋“ค์ด ์žˆ๋Š”์ง€ ํ•จ๊ป˜๋ณด์‹œ์ฃ ~! ๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ ์œ ๋‹ˆ์ฝ”๋“œ ์Šค์นผ๋ผ ์˜๋ฏธ ์ž ๊น ๋ณด๊ณ  ๊ฐ€์‹œ์ฃ ~! ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์— ๋ฐฐ๋‹น๋œ ์ˆซ์ž๋ฅผ ์˜๋ฏธ ํ•ฉ๋‹ˆ๋‹ค "U+" + 16์ง„์ˆ˜ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ ๋˜์–ด์žˆ๊ตฌ์š” U+0000๋ถ€ํ„ฐ U+D7FF๊นŒ์ง€, U+E000๋ถ€ํ„ฐ U+10FFFF๊นŒ์ง€์˜ ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค 1. ์œ ๋‹ˆ์ฝ”๋“œ ์†์„ฑ ๊ฒ€์‚ฌ Bool ๊ฐ’ ์ถ”๊ฐ€ scalar properties ์—์„œ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ Bool ๊ฐ’์„ ์ด์šฉํ•ด์„œ ์–ด๋–ค ๋ฌธ์ž๊ฐ€ ํฌํ•จ ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. isMath, isUppercase, isASCIIHexDigit... let question = "Which is larger, 3 * 3 * 3 or 10 + 10 + 1..

  • textsms