๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŽ iOS

(71)
[iOS] ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„ํ•˜๊ธฐ - Command Line Tool, LeadLine, Split, Components, map, print ์‚ฌ์šฉํ•˜๊ธฐ Swift๋กœ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ค€๋น„, ์„ธํŒ…ํ•˜๊ธฐ Swift ์ž…๋ ฅํ•˜๊ธฐ Swift๋กœ ์ฝ”ํ…Œ๋ฅผ ์ค€๋น„ํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ! ์–ด๋–ป๊ฒŒ ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜์ง€...? Swift๋กœ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด์„  project ์ƒ์„ฑ์‹œ, playground, app์ด ์•„๋‹Œ ์ƒˆ๋กœ์šด ํƒฌํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค! ์ฝ”ํ…Œ๋ฅผ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ๋ฒ•, Swift์—์„œ ์ž…์ถœ๋ ฅ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค! ๐Ÿ‘ป 1. ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ ๋จผ์ €, playground๋Š” sandbox์ด๊ธฐ ๋•Œ๋ฌธ์— commandline input์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค! (*์ƒŒ๋“œ๋ฐ•์Šค(sandbox) : ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ ํ”„๋กœ๊ทธ๋žจ์ด ๋ณดํ˜ธ๋œ ์˜์—ญ์—์„œ ๋™์ž‘ํ•ด ์‹œ์Šคํ…œ์ด ๋ถ€์ •ํ•˜๊ฒŒ ์กฐ์ž‘๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๋ณด์•ˆ ํ˜•ํƒœ) ๋”ฐ๋ผ์„œ, project๋ฅผ ์ƒ์„ฑ ์‹œ ํ…œํ”Œ๋ฆฟ์„ Command Line Tool๋กœ ์„ ํƒํ•˜์—ฌ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค! xc..
[Error, Xcode] Multiple commands produce Error ํ•ด๊ฒฐํ•˜๊ธฐ Multiple commands produce Error ํ•ด๊ฒฐํ•ด ๋ณด์ž ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Multiple commands produce Error ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.๐Ÿ˜Š ์ €์˜ ๊ฒฝ์šฐ ๋ณดํ†ต ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•˜์„ ๋•Œ ๋งŒ๋‚ฌ๋˜ ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค. ์ค‘๋ณต๋œ ํŒŒ์ผ๋ช…์ด ์žˆ๊ฑฐ๋‚˜, ์ค‘๋ณต๋œ ํƒ€๊ฒŸ์ด ์žˆ์–ด์„œ ์ถฉ๋Œ๋กœ ์ธํ•œ ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค.๐Ÿ‘ป ์—๋Ÿฌ ๋‚ด์šฉ์ด ์นœ์ ˆํ•˜๊ฒŒ ๋ช…์‹œ๋˜์–ด ์žˆ์–ด์„œ ๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€๋งŒ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์–ด์„œ ์ €๋Š” ์ค‘๋ณต๋œ ํŒŒ์ผ๊ณผ ์ค‘๋ณต๋œ ํƒ€๊ฒŸ 2๊ฐ€์ง€๋ฅผ ์ฒดํฌํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€์–ด์š”. Solution1. ํ•ด๋‹น ๋กœ๊ทธ์— ๋ช…์‹œ๋œ ๊ฒฝ๋กœ์˜ ํŒŒ์ผ ์‚ญ์ œ ํŒŒ์ผ์ด ์ค‘๋ณต๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์ค‘๋ณต๋œ ํŒŒ์ผ์„ ์‚ญ์ œํ•ด์ค๋‹ˆ๋‹ค. Project > Targets > Build Phases > Copy Bundle Resources ํ•ด๋‹น ..
[Swift] String(describing:) ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ํด๋ž˜์Šค ์ด๋ฆ„ ์–ป๊ธฐ String(describing:) ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•˜์—ฌ float String, ํ˜„์žฌ ํด๋ž˜์Šค ์ด๋ฆ„ ๋ฐ›๊ธฐ Declaration init(describing instance: Subject) Swift์—์„œ ๊ฐ’์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ String( )์œผ๋กœ ํŠน์ • ๊ฐ’์„ ๊ฐ์‹ธ์„œ ๋ฌธ์ž์—ด(String)๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Swift์˜ ๊ธฐ๋ณธ ํƒ€์ž…๋“ค์€ ๋ชจ๋‘ ์ด ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, (์‚ฌ์‹ค ์ธํ„ฐํด๋ ˆ์ด์…˜์ด ๊ฐ€๋Šฅํ•œ ํƒ€์ž…๋“ค์€ ๋‹ค ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.) ๊ทธ ์™ธ์— ์ด๋ฅผ ํ†ตํ•œ ์ง๋ณ€ํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ํƒ€์ž…๋“ค์€ String(describing:)์„ ์ด์šฉํ•ด์„œ ๋ณ€ํ™˜ํ•˜๋ฉด ๋œ๋‹ค. Float -> String let stringValue = String(describing: floatValue) ๋ฐ˜๋Œ€๋กœ String -> Float let floatValue = CGFl..
[iOS] respondsToSelector, ์˜ต์…”๋„ ์ฒด์ด๋‹ ์‚ฌ์šฉํ•˜์—ฌ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์˜ ์„ ํƒ์  ๋ฉ”์†Œ๋“œ(optional method) ๊ตฌํ˜„ ์—ฌ๋ถ€ ํ™•์ธํ•˜๊ธฐ (in Swift, Objective-C) ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์˜ ์„ ํƒ์  ๋ฉ”์†Œ๋“œ(optional method) ๊ตฌํ˜„ ์—ฌ๋ถ€ ํ™•์ธํ•ด๋ณด์ž Swift์™€ Objc์˜ ํ”„๋กœํ† ์ฝœ์—์„œ ๋ฉ”์†Œ๋“œ๋Š” ํ•„์ˆ˜, ์„ ํƒ์  ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์„ ํƒ์  ๋ฉ”์†Œ๋“œ(optional method)๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „, ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ์„ ํƒ์ž์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด์„ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.!!! ๊ตฌํ˜„ํ•˜์ง€ ์•Š์€ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ null๊ฐ’์„ ๋ณด๋‚ด Crash๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ!!! ๐Ÿ˜ญ ๋”ฐ๋ผ์„œ, ๋ฐ˜๋“œ์‹œ ํ”„๋กœํ† ์ฝœ์˜ ์˜ต์…”๋„ ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ ์ „ ๊ตฌํ˜„ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค. ๐Ÿ‘๐Ÿป โ–ถ Objective-C ํ”„๋กœํ† ์ฝœ ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„ ์—ฌ๋ถ€ ํ™•์ธํ•˜๊ธฐ ์ผ๋‹จ ObjC ์—์„œ ํ”„๋กœํ† ์ฝœ์€ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ํ‚ค์›Œ๋“œ๊ฐ€ ์—†๋Š” ๋ฉ”์†Œ๋“œ๋Š” ๋ชจ๋‘ ํ•„์ˆ˜์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ, @optional ํ‚ค์›Œ๋“œ ๋‹ค์Œ์— ๋‚˜์˜ค๋Š” ๋ฉ”์†Œ๋“œ๋“ค..
[Swift] 1. ๋ช…๋ช…๋ฒ•, ์ฝ˜์†” ๋กœ๊ทธ, ๋ฌธ์ž์—ด ๋ณด๊ฐ„๋ฒ• 1. ๋ช…๋ช…๋ฒ• Swift์—์„œ๋Š” ์ด๋ฆ„์„ ์ง€์„ ๋•Œ ์นด๋ฉœ์ผ€์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋ชจ๋“  ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. Lower Camel Case(์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘) : fuction, method, variable, constant ex) viewDidLoad, userTable ๋“ฑ Upper Camel Case(๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘) : type(class, struct, enum, extension…) ex) Person, Point, Week ๋“ฑ 2. ์ฝ˜์†”๋กœ๊ทธ print ํ•จ์ˆ˜ : ๋‹จ์ˆœ ๋ฌธ์ž์—ด ์ถœ๋ ฅ dump ํ•จ์ˆ˜ : ์ธ์Šคํ„ด์Šค์˜ ์ž์„ธํ•œ ์„ค๋ช…(description ํ”„๋กœํผํ‹ฐ)๊นŒ์ง€ ์ถœ๋ ฅ class Person { var name: String = "TechYeon" var age: Int = 10 } let techYeon: Person..
[Xcode] Xcode ๋‹จ์ถ•ํ‚ค ๋ชจ์Œ ํŒŒ์ผ, ํด๋” ๊ด€๋ จ โญ๏ธ ํŒŒ์ผ ๊ฒ€์ƒ‰ (Open quickly) : cmd + shift + o โญ๏ธ ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” ํŒŒ์ผ ์œ„์น˜ ํ™•์ธ : cmd + shift + j ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ : cmd + shift + n ์ƒˆ๋กœ์šด ํด๋” ์ƒ์„ฑ : cmd + alt + n Xcode ์ฐฝ(์˜์—ญ) ๐Ÿ”ฅ์ธ์ŠคํŽ™ํ„ฐ ์˜์—ญ - ํŒŒ์ผ ์ธ์ŠคํŽ™ํ„ฐ : ํ”„๋กœ์ ํŠธ ๋‚ด๋น„๊ฒŒ์ดํ„ฐ์—์„œ ์„ ํƒํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ํŒŒ์ผ๋ช…๊ณผ ์ข…๋ฅ˜๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉฐ, ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ ๊ฒฝ์šฐ ํŒŒ์ผ ์ •๋ณด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋นŒ๋“œ ๋Œ€์ƒ iOS๋ฒ„์ „ ๋“ฑ ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”์˜ ์„ค์ •๋„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒŒ์ผ๋ช…์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์•ฑ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋นŒ๋“œ ๋Œ€์ƒ์˜ ๋ฒ”์œ„๋ฅผ ์กฐ์ ˆํ•  ๋•Œ์—๋„ ์‚ฌ์šฉํ•œ๋‹ค. - ํžˆ์Šคํ† ๋ฆฌ ์ธ์ŠคํŽ™ํ„ฐ : ํ˜„์žฌ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ „์ฒด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ปค๋ฐ‹ํ•œ ์‹œ๊ฐ„๊ณผ ๋‚ ์งœ,..
[iOS] Xcode ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋…นํ™”ํ•˜๊ธฐ, ์•„์ดํฐ ํ™”๋ฉด ๋…นํ™”ํ•˜๊ธฐ (๋™์˜์ƒ, GIF๋กœ ์ €์žฅํ•˜๊ธฐ) Xcode์—์„œ ๊ฐœ๋ฐœ ํ›„ ํ…Œ์ŠคํŠธํ•œ ๊ฒฐ๊ณผ ํ™”๋ฉด์„ ์˜์ƒ์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ! ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ์‹ค์ œ ๊ธฐ๊ธฐ์—์„œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋นŒ๋“ฏ์ด ๋ฐฉ๋ฒ• 3๊ฐ€์ง€๋ฅผ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š” :) 1. ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋นŒ๋“œ์‹œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋กœ ๋นŒ๋“œํ•œ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๋ฉด File > Record Screen ํด๋ฆญ ํ˜น์€ โŒ˜ command + R ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. (+ ๋งฅ๋ถ ํ„ฐ์น˜๋ฐ”์—์„œ ๋…นํ™”๋ฒ„ํŠผ ํด๋ฆญ ๊ฐ€๋Šฅ) ํด๋ฆญ ์‹œ, ์•„๋ž˜์™€ ๊ฐ™์ด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ์ƒ๋‹จ์˜ ์Šคํฌ๋ฆฐ์ƒท ๋ฒ„ํŠผ์ด ์˜ค๋ฅธ์ชฝ์ฒ˜๋Ÿผ ๋นจ๊ฐ„ ๋…นํ™” ๋ฒ„ํŠผ์œผ๋กœ ๋ฐ”๋€Œ๋ฉด์„œ ๋…นํ™”๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ๋…นํ™”๋ฅผ ๊ทธ๋งŒ๋‘๊ณ  ์‹ถ์„๋• ์œ„์˜ ๋นจ๊ฐ„ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋˜๋Š”๋ฐ ์•„๋ฌด๋Ÿฐ ์„ค์ • ์—†์ด ์ €์žฅํ•˜๋ฉด ๋ฐ”ํƒ•ํ™”๋ฉด์— .mp4 ํŒŒ์ผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋…นํ™”๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ์šฐ์ธก ํ•˜๋‹จ์— ๋…นํ™”ํ•œ ํ™”๋ฉด์ด ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ, ์ด๋•Œ, ์ด ํ™”๋ฉด ์œ„์— ๋งˆ์šฐ์Šค๋กœ ์šฐ์ธก๋ฒ„ํŠผ ํด๋ฆญ ์‹œ GIF ํฌ๋งท..

๋ฐ˜์‘ํ˜•