๐ŸŽ iOS

    [Swift] Protocols | Delegate๋ฅผ ์‚ด์ง ๊ณ๋“ค์ธ

    ํ”„๋กœํ† ์ฝœ์ด๋ž€? ํ”„๋กœํ† ์ฝœ: ์ตœ์†Œํ•œ์œผ๋กœ ๊ฐ€์ ธ์•ผํ•  ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น Object๊ฐ€ task๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์„ ์ •์˜ํ•ด์ค€๋‹ค. Java์˜ interface์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. protocol์€ ์„ ์–ธ์ด๊ณ , type์—์„œ ๊ตฌํ˜„ํ•ด์ค˜์•ผํ•œ๋‹ค. ex1) Swift์—์„œ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ์˜ˆ์‹œ ์ค‘ ํ•˜๋‚˜์ธ CustomStringConvertible์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ํ‹€๋Œ€๋กœ class๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. var greeting = "Hello, playground" class person: CustomStringConvertible { let name: String let age: Int let isFemale: Bool init(name: String, age: Int..

    [iOS][error] Editor placeholder in source file

    Command + Shift + B ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

    [iOS] Xcode Workspace | ๊ฐ Area์˜ ๋ช…์นญ, ์—ญํ• 

    Tool Bar Navigator Area Project navigator: ํŒŒ์ผ์„ ์ถ”๊ฐ€, ์‚ญ์ œ ๋ฐ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ํŽธ์ง‘๊ธฐ์—์„œ ํŒŒ์ผ์„ ์—ฐ๋‹ค. Source Control navigator: ์†Œ์Šค ์ œ์–ด ์ž‘์—… ๋ณต์‚ฌ๋ณธ, ์ปค๋ฐ‹, ํƒœ๊ทธ ๋ฐ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ. (Git ๊ด€๋ จ navigator) Symbol navigator: ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌํ•ด์„œ ๋ณด์—ฌ์ค€๋‹ค. Find navigator: ํ”„๋กœ์ ํŠธ์™€ ํ”„๋ ˆ์ž„์›Œํฌ ์•ˆ์—์„œ ํ…์ŠคํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค. Issue navigator: ํ”„๋กœ์ ํŠธ์˜ ์—๋Ÿฌ๋‚˜ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. Test navigator: Unit test๋ฅผ ์ƒ์„ฑ, ๊ด€๋ฆฌ ๋ฐ ์‹คํ–‰ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ๊ฒ€ํ† ํ•œ๋‹ค. Debug navigator: ๋””๋ฒ„๊ทธ ๊ด€๋ จ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. Breakpoint navigator..

    [iOS] App Project ์†์„ฑ | Xcode Project / Project / Target

    [PROJECT] : ๋ชจ๋“  ํŒŒ์ผ, ๋ฆฌ์†Œ์Šค, ์†Œํ”„ํŠธ์›จ์–ด ๋นŒ๋“œ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด์˜ ์ €์žฅ์†Œ ํ”„๋กœ์ ํŠธ์—๋Š” ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ์š”์†Œ ๊ฐ„์˜ ๊ด€๊ณ„(relationships)๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ๋Š” product๋ฅผ buildํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ช…์‹œํ•˜๋Š” target์„ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จํ•˜๋ฉฐ ๋ชจ๋“  target์— ๋Œ€ํ•œ ๊ธฐ๋ณธ build setting์„ ์ •์˜ํ•œ๋‹ค. Info Deployment Target: ์ง€์›ํ•˜๋Š” ์ตœ์†Œ OS ๋ฒ„์ „ Configurations: Debug / Release build setting (๋ณดํ†ต ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ - Debug, Archiveํ•  ๋•Œ - Release)⇒ ๋ณด๋‹ค ๋” ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด configuration์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ ex. ๊ฐœ๋ฐœ ๋ฒ„..

    [iOS] info.plist | Xcode 12

    Info.plist = Information Property List Files Info.plist๋Š” Xcode ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ์‹คํ–‰ ํŒจํ‚ค์ง€์— ๊ด€ํ•œ ํ•„์ˆ˜ ์„ค์ • ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ XML์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐํ™”๋œ ํ…์ŠคํŠธ ํŒŒ์ผ์ด๋‹ค. iOS ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ์ •๋ณด๋ฅผ ๋‹ด์•„ ๋†“์„ ์ˆ˜ ์žˆ๋Š” ์„ค์ •ํŒŒ์ผ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. XML์€ Key, Value๋กœ ๊ตฌ์„ฑ๋œ Dictionary ํ˜•ํƒœ์ด๋‹ค. ์‹œ์Šคํ…œ์€ ์ด ํ‚ค์™€ ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ์•ฑ๊ณผ ์•ฑ์˜ ์„ค์ •์„ ๊ฐ€์ ธ์˜จ๋‹ค. ๐Ÿ’ก ํŠน์ • ํ‚ค or ๊ฐ’์„ ํŽธ์ง‘ํ•˜๋ ค๋ฉด ๊ฐ’์„ ๋”๋ธ”ํด๋ฆญํ•˜์—ฌ ์„ ํƒํ•œ ๋‹ค์Œ ์ƒˆ ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค. ๐Ÿ’ก ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด (+) ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ์ž„์˜์˜ ํ‚ค๋ฅผ ํด๋ฆญํ•˜๊ณ  ์—”ํ„ฐ๋ฅผ ์น˜๋ฉด ํ•ด๋‹น ํ‚ค ์•„๋ž˜์— ์ƒˆ๋กœ์šด ํ‚ค๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค. [ Information Property List ..

    [iOS] Completion Handler์„ ์ด์šฉํ•œ Loading Progress ๊ตฌํ˜„

    GitHub - krimpedance/KRProgressHUD: A beautiful and easy-to-use progress HUD for your iOS. A beautiful and easy-to-use progress HUD for your iOS. - GitHub - krimpedance/KRProgressHUD: A beautiful and easy-to-use progress HUD for your iOS. github.com KRProgressHUD๋ฅผ ์ด์šฉํ•˜์—ฌ Loading Progress๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž. ์ด์ œ pod init - pod '์‚ฌ์šฉํ• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ' - pod install์˜ ๋ฃจํ‹ด์— ์™„๋ฒฝ ์ ์‘ ^-^v Completion handler๋Š” ์–ด๋– ํ•œ ์ผ์ด ๋๋‚ฌ์„ ๋•Œ ์ง„ํ–‰ํ•  ์—…๋ฌด๋ฅผ ๋‹ด๋‹นํ•˜..

    [Swift] Guard๋ฌธ | guard let

    Guard๋ฌธ์€ ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•  ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ทธ ๋‹ค์Œ์— ์˜ค๋Š” ์ฝ”๋“œ๋“ค์„ ์‹คํ–‰ํ• ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. Guard๋ฅผ ์ด์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 1. control flow์™€ indentation์„ ๋‹จ์ˆœํ•˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด → ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ง€๊ณ  ๊ทธ๋กœ ์ธํ•ด ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. 2. ๋ถ€์ ์ ˆํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์—†์• ๋ฒ„๋ฆฌ๊ธฐ ์œ„ํ•ด if๋ฌธ vs guard๋ฌธ if๋ฌธ ์‚ฌ์šฉ ver. func singHappyBirthday(){ if(birthdayIsToday){ if(invitedGuests > 0){ if (cakeCandleLit){ print("Happy Birthday to you!") }else{ print("์ผ€์ต ์ด›๋ถˆ ๋ถˆ ์•ˆ์ผœ์ง") } }else{ print("์ดˆ๋Œ€ ์•„๋ฌด๋„ ์•ˆํ•จ") } }else{ p..

    [iOS] WebKit View | ์•ฑ์—์„œ Web ํŽ˜์ด์ง€ ์—ด๊ธฐ

    ์—ด๊ณ  ์‹ถ์€ ์›นํŽ˜์ด์ง€์˜ URL๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์•ฑ์—์„œ ๋ฐ”๋กœ ํ•ด๋‹น ์›นํŽ˜์ด์ง€๋ฅผ ์—ด ์ˆ˜ ์žˆ๋‹ค! ๋จผ์ €, storyboard์— WebKit View๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. Web View๋Š” deprecated ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. (old version) Webkit์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ์Šคํ† ๋ฆฌ๋ณด๋“œ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์— WebKit ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ import ํ•ด์ค€๋‹ค. import WebKit ๋„ค์ด๋ฒ„๋ฅผ ์—ด๊ธฐ ์œ„ํ•ด ๋„ค์ด๋ฒ„์˜ ์ฃผ์†Œ๋ฅผ url์— ๋„ฃ์–ด์ค€๋‹ค. import UIKit import WebKit class ViewController: UIViewController { @IBOutlet weak var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() let ..