๋ฐ˜์‘ํ˜•

์ „์ฒด ๊ธ€ 83

[Swift] ARC(Automatic Reference Counting)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

์•ˆ๋…•ํ•˜์„ธ์š”~ ์˜ค๋Š˜์€ ARC์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ARC๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘์—์„œ Heap ์˜์—ญ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ, ์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด ์žˆ๋Š”๋ฐ ์ด ์ค‘์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์˜์—ญ์€ stack๊ณผ heap์ž…๋‹ˆ๋‹ค. Stack - Stack์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค, ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜, ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ์ฃผ์†Œ ๋“ฑ์ด ์Šคํƒ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ๋œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์Šคํƒ์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. Heap - Heap์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์˜์—ญ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ..

iOS/Swift 2023.03.04

[Swift] GCD(Grand Central Dispatch)์— ๋Œ€ํ•ด์„œ

์•ˆ๋…•ํ•˜์„ธ์š”~ ์˜ค๋Š˜์€ GCD์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. GCD์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์˜ˆ์‹œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. GCD์˜ ๊ฐœ๋… - GCD (Grand Central Dispatch)๋Š” C๊ธฐ๋ฐ˜์˜ ์ €์ˆ˜์ค€ API๋กœ Apple์˜ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. GCD๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ(Queue)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ํ๋Š” ๋ฐ”๋กœ ์ €ํฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” DispatchQueue์ž…๋‹ˆ๋‹ค. ์ด ํ๋Š” ๊ฐ๊ฐ์˜ ์ž‘์—…์€ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. (1) Serial Queue - ํ์— ์ถ”๊ฐ€๋œ ์ž‘์—…์€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ž‘์—…์€ ์ด์ „ ์ž‘์—…์ด ๋๋‚˜์•ผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. - main queue : UI ์—…๋ฐ์ดํŠธ์™€ ๊ฐ™์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰ํ•ด..

iOS/Swift 2023.03.01

[Swift] DFS(Depth-First Search, ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž

์•ˆ๋…•ํ•˜์„ธ์š”~ ์˜ค๋Š˜์€ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰( DFS, Depth-First Search )์ด๋ž€? ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์€ ํƒ์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋…ธ๋“œ๋“ค์˜ ์ž์‹ ๋…ธ๋“œ๋ถ€ํ„ฐ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์ด๋ฏธ์ง€์— ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ BFS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ž์„œ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ž์‹ ๋…ธ๋“œ๋ถ€ํ„ฐ ํ™•์ธํ•˜๋Š”๋ฐ ์˜ˆ๋ฅผ ๋“ค์–ด์„œ 1์„ ๊ฐ€์žฅ ๋จผ์ € ํƒ์ƒ‰ํ•˜๊ณ  ๋‚˜๋ฉด 8, 6, 10, 7, 4 ... ์„ ์ˆœ์„œ๋Œ€๋กœ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํƒ์ƒ‰ํ•˜๊ณ ์žํ•˜๋Š” ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋“ค์„ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. BFS์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฌ๊ธฐ์„œ 8๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋“  2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋“  ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ ์€ ์ž์‹ ๋…ธ๋“œ๋“ค์„ ์šฐ์„  ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. โœ”๏ธŽ Swift๋กœ ๊ตฌํ˜„ํ•ด ๋ณด๊ธฐ ์œ„์˜ ์ด๋ฏธ์ง€์— ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด DFS๋ฅผ..

[Swift] BFS(Breadth-First Search, ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž

์•ˆ๋…•ํ•˜์„ธ์š”~ ์˜ค๋Š˜์€ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰( BFS, Breadth-First Search )์ด๋ž€? ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์€ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์„ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์ด๋ฏธ์ง€์— ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ BFS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ž์„œ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ถ€ํ„ฐ ํ™•์ธํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์˜ˆ๋ฅผ ๋“ค์–ด์„œ 1์„ ๊ฐ€์žฅ ๋จผ์ € ํƒ์ƒ‰ํ•˜๊ณ  ๋‚˜๋ฉด ์ธ์ ‘ํ•œ 8, 5, 2๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ 6๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ 9๊นŒ์ง€ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๊ฒ ์ฃ ? ์ฆ‰, ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 8๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋“  2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜ ๋“  ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ ์€ ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์ „๋ถ€ ํƒ์ƒ‰ํ•˜๊ณ  ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ๋„˜์–ด๊ฐ„๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. โœ”๏ธŽ Swift๋กœ ๊ตฌํ˜„ํ•ด ๋ณด๊ธฐ ์œ„์˜ ์ด๋ฏธ์ง€์— ์žˆ๋Š” ๊ทธ๋ž˜ํ”„..

[Swift] ์ž๋ฃŒ๊ตฌ์กฐ - ํž™(Heap)

์•ˆ๋…•ํ•˜์„ธ์š”~ ์˜ค๋Š˜์€ ํž™ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํž™(Heap)์ด๋ž€? ๋ฐ์ดํ„ฐ์—์„œ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์™„์ „์ด์ง„ํŠธ๋ฆฌ ์•„๋ž˜์˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฑ„์›Œ๊ฐ€๋ฉฐ ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ฑ„์›Œ์ ธ ์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ํž™์˜ ์ข…๋ฅ˜ ์œ„์˜ ์„ค๋ช…์—์„œ ํž™์€ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ํž™์€ ๋‘๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ ํž™ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ž์‹ ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ํž™์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊ฐ’์€ ํ•ญ์ƒ ์ตœ๋Œ“๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค. ์ตœ์†Œ ํž™ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ž์‹ ์˜ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ํž™์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊ฐ’์€ ํ•ญ์ƒ ์ตœ์†Ÿ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค. ์œ„์˜..

[Xcode] Xcode 14.0๋ถ€ํ„ฐ๋Š” ์–ด๋–ค๊ฒŒ ๋ฐ”๋€Œ์—ˆ์„๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹๐Ÿป ์กฐ๊ธˆ ๋Šฆ์€ ๊ฐ์ด ์žˆ์ง€๋งŒ ์ตœ๊ทผ์— ์—…๋ฐ์ดํŠธ๋œ Xcode 14.0์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 1. 30% ์ž‘์•„์ง„ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ€์žฅ ๋จผ์ € ๋ˆˆ์— ๋„์—ˆ๋˜ ๊ฒƒ์€ ๊ธฐ์กด์˜ Xcode๋ณด๋‹ค 30% ์ •๋„ ์ž‘์•„์ง„ ๋ฐ”์ด๋„ˆ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ Xcode๋ฅผ ๋‹ค์šด๋ฐ›์œผ๋ ค๊ณ  ํ•  ๋•Œ ๋ณดํ†ต 10 GB ์ด์ƒ์ด ํ•„์š”ํ–ˆ์ง€๋งŒ ์ด๋ฒˆ Xcode 14.0 ๋ฒ„์ „์˜ ๊ฒฝ์šฐ 7GB ์ •๋„๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜๊ฐ€ ๋”์šฑ ์šฉ์ดํ•ด์กŒ์Šต๋‹ˆ๋‹ค. โœ“ ์–ด๋–ป๊ฒŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ 30% ์ •๋„ ์ค„์–ด๋“ค ์ˆ˜ ์žˆ์—ˆ์„๊นŒ? ์œ„์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์‹œ๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด watchOS, tvOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ 30% ์ž‘์•„์งˆ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 2. ๊ธฐ์กด๋ณด๋‹ค 25% ๋นจ๋ผ์ง„ ๋นŒ๋“œ ์‹œ์Šคํ…œ โœ“ ๋ชจ๋“ˆ์„ ๋นŒ๋“œ ๋ฐ ๋งํฌ ๋‹จ๊ณ„์—์„œ ๋”์šฑ๋” ํ–ฅ์ƒ๋œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๊ธฐ์กด ..

iOS/Xcode 2022.11.30

[Swift] ์ •๊ทœ์‹์„ ํ†ตํ•œ ๋ฌธ์ž์—ด ํŒ๋‹จ

์•ˆ๋…•ํ•˜์„ธ์š”~ ์˜ค๋Š˜์€ ์ •๊ทœ์‹์„ ํ†ตํ•ด ๋ฌธ์ž์—ด์„ ํŒ๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค : ) ์ฒซ ๋ฒˆ์งธ, ๋ฌธ์ž์—ด ์ „์ฒด๊ฐ€ ํŠน์ • ๊ทœ์น™์— ๋ถ€ํ•ฉํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ• let myString: [String] = ["๋‚˜๋Š”", "๋ฐ”๋ณด๋‹ค", "1597", "๊ฐ€๋‚˜๋‹ค123๋ผ๋งˆ๋ฐ”4"] let pattern: String = "^[0-9]*$" // ์ˆซ์ž ์ •๊ทœ์‹ for string in myString { guard let _ = string.range(of: pattern, options: .regularExpression) else { print("\(string)์€ ์ˆซ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์–ด์š”..") continue } print("\(string)์€ ์ˆซ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋„ค์š”!") } myString์—์„œ ์ˆซ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ..

iOS/Swift 2022.11.14

[Swift] ๋ฌธ์ž์—ด ์ž๋ฅด๊ธฐ ๋ฐ ์ˆซ์ž๋กœ ๋ฐ˜ํ™˜์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”~ ์˜ค๋Š˜์€ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด์„œ ๋‘ ๊ฐ€์ง€๋ฅผ ์ •๋ฆฌํ•ด ๋‘๊ณ  ๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค : ) ๋ฌธ์ž์—ด์„ ์ž๋ฅด๋Š” ๋ฐฉ๋ฒ• - string.index(string.startIndex, offsetBy: number)๋ฅผ ํ™œ์šฉํ•˜๊ธฐ - ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ์ž‘ ์ธ๋ฑ์Šค์™€ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ํ•ด๋‹น ๋ฌธ์ž์—ด์˜ range๋ฅผ ์กฐ์ •ํ•ด ์ž๋ฅธ ๋ฌธ์ž์—ด์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. var myString = "Hello, world!" let startIndex = myString.index(myString.startIndex, offsetBy: 0) let endIndex = myString.index(myString.startIndex, offsetBy: 5) let output = myString[startIndex ..< endIndex..

iOS/Swift 2022.11.12

[Swift] UITextField์—์„œ Placeholder์˜ ์ƒ‰์ƒ ๋ฐ”๊พธ๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”~ ์˜ค๋Š˜์€ UITextField์˜ Placeholder์˜ ํ…์ŠคํŠธ ์ปฌ๋Ÿฌ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค : ) TextField์— ์ ‘๊ทผํ•˜์—ฌ placeholder์˜ ํ…์ŠคํŠธ ์ปฌ๋Ÿฌ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋‚˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 1. ํ…์ŠคํŠธ ํ•„๋“œ ์„ ์–ธ private let myTextField: UITextField = UITextField() 2. ํ…์ŠคํŠธ ํ•„๋“œ์˜ attributedPlaceholder ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ ๋ฐ ์›ํ•˜๋Š” ์ปฌ๋Ÿฌ๋กœ ์„ค์ • myTextField.attributedPlaceholder = NSAttributedString(string: "๋‚˜์˜ ์ปฌ๋Ÿฌ๋Š” ํŠน๋ณ„ํ•˜์ง€", attributes: [NSAttributedString...

iOS/Swift 2022.11.10

[Swift] WebView์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ปฌ๋Ÿฌ๋ฅผ Clear๋กœ ๋ณ€๊ฒฝ & Content Size ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•

์•ˆ๋…•ํ•˜์„ธ์š”~ ์˜ค๋Š˜์€ WebView์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ปฌ๋Ÿฌ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Content Size๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค : ) 1. WebView์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ปฌ๋Ÿฌ๋ฅผ Clear๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• webView์— ์ ‘๊ทผํ•ด backgroundColor๋ฅผ clear๋กœ ์กฐ์ •ํ•˜๋”๋ผ๋„ white๋กœ ๋ณด์ด๊ธธ๋ž˜ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๋‹ค ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. webView.isOpaque = false webView.backgroundColor = .clear ์œ„์™€ ๊ฐ™์ด isOpaque์˜ ๊ฐ’์„ false๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด ์›ํ•˜๋Š” ๋Œ€๋กœ clear๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 2. WebView์˜ ์ฝ˜ํ…์ธ ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” ๋ฐฉ๋ฒ• webView์˜ ๋กœ๋“œ๊ฐ€ ๋๋‚˜๊ณ  ๋‚˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด d..

iOS/Swift 2022.11.09
๋ฐ˜์‘ํ˜•