๐ŸŽ iOS & Swift

ยท๐ŸŽ iOS & Swift
URLSession ์•„๋ž˜ 3๊ฐ€์ง€๋ฅผ ์ž˜ ๊ธฐ์–ตํ•ด๋ณด์ž - URLSession - URLSessionDataTask - Response, CompletionHandler URLSessionDataTask - ์š”์ฒญ์„ ํ•˜๋Š” ํ•˜๋‚˜ํ•˜๋‚˜(Task) - ์ผ๋ฐ˜ ํ†ต์‹ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋‹ค์šด๋กœ๋“œ, ์‹œํฌ๋ฆฟ ๋ชจ๋“œ ๋“ฑ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ Task๋กœ ์ข…๋ฅ˜๊ฐ€ ๋‚˜๋‰œ๋‹ค. URLSessionDelegate - + å๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. - ์ค‘๊ฐ„ ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์–ผ๋งˆ๋‚˜ ๋ฐ›์•„์™”๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. - ex. ์นด์นด์˜คํ†ก ์‚ฌ์ง„ 10์žฅ ํ•œ ๋ฒˆ์— ์ €์žฅ (๋‹ค์šด๋กœ๋“œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ•œ ์žฅ์”ฉ ๋‹ค์šด๋กœ๋“œ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.) - ์ผ๋ฐ˜ ํ†ต์‹ ์—์„œ๋Š” ์†๋„๊ฐ€ ๊ต‰์žฅํžˆ ๋น ๋ฅธ ํŽธ์ด๊ธฐ ๋•Œ๋ฌธ์— Delegate๊นŒ์ง€ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. URLSes..
ยท๐ŸŽ iOS & Swift
URL ๋ถ„์„ ๊ตฌ์กฐ URL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. scheme://[userinfo@]host[:port][/path][?query][#fragment] scheme ํ•ด๋‹น ๋ถ€๋ถ„์—๋Š” ์ฃผ๋กœ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๋ฉด ์ฃผ๋กœ http ๋˜๋Š” https ํ”„๋กœํ† ์ฝœ์ด ์œ„์น˜ํ•œ๋‹ค. ํ”„๋กœํ† ์ฝœ์ด๋ž€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ž์›์— ์ ‘๊ทผํ•  ๊ฒƒ์ธ๊ฐ€๋ฅผ ์ •ํ•œ ์•ฝ์† ๋˜๋Š” ๊ทœ์น™์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. htttps๋Š” http์— ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. userinfo URL์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์„œ ์ธ์ฆ์„ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. host ๋„๋ฉ”์ธ ์ด๋ฆ„ ๋˜๋Š” IP ์ฃผ์†Œ๊ฐ€ ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค. port http๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 80 ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , https๋Š” 44..
ยท๐ŸŽ iOS & Swift
๋“ค์–ด๊ฐ€๋ฉฐ ์‚ฌ์‹ค ๋˜‘๋˜‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด์ง€ ์•„๋‹Œ์ง€ ํ™•์ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ชจ์ˆœ์ด ์žˆ์ง€๋งŒ, ๊ทธ๋ž˜๋„ ๋‚˜๋ฆ„ ์ฝ”๋“œ ๊ฐœ์„ ์„ ํ•ด๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์œผ๋‹ˆ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ๋ณด๊ฒ ๋‹ค.... (๊ณ ๋ฏผ์˜ ํ”์ )... Realm์„ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ•œ์ •์ ์ด๊ณ  ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๊ณณ์— ๋ชจ์•„์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ Manager ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ž˜ ๋งŒ๋“  ๊ฑด์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค. ๊ทธ๋ž˜๋„ ํ™•์‹คํžˆ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ํŽธํ•ด์กŒ๋‹ค๋Š” ๊ฒƒ์„ ๋Š๊ผˆ๋‹ค. ๋ฐ”๋กœ ํ•œ ๋ฒˆ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž! ์ฝ”๋“œ ์‚ดํŽด๋ณด๊ธฐ 1. ๊ตฌํ˜„๋ถ€ // ๊ตฌํ˜„๋ถ€ import UIKit import RealmSwift protocol DataBase { func read(_ object: T.Type) -> Results func write(_ object: ..
ยท๐ŸŽ iOS & Swift
์…€์„ ๋ณด๋ฉด ํฐ์ƒ‰ ์ ์„ ์ด ๋ณด์ผ ๊ฒƒ์ด๋‹ค. ์…€ ์•ˆ์— ์ ์„ ์„ ๊ทธ๋ ค์„œ ๋„ฃ์–ด์ฃผ๊ณ  ์‹ถ์–ด ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐพ์•„๋ดค๋Š”๋ฐ ์žˆ๋”๋ผ.. ๊ทธ๋ž˜์„œ ์•ผ๋ฌด์ง€๊ฒŒ ์ด์šฉํ•ด์ฃผ์—ˆ๋‹ค. ํŠน๋ณ„ํ•œ ๋‚ด์šฉ์€ ์—†๋‹ค. ๋ฌธ์„œ์— ์˜ˆ์ œ ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋‚˜์™€์žˆ์–ด์„œ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ํ•œ ๊ฐ€์ง€ ํฌ์ธํŠธ๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Core Animation > CAShapeLayer > lineDashPattern CAShapeLayer ์•„๋ž˜์— ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ์ด๋‹ค. CAShapeLayer ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  lineDashPattern์— ์ˆซ์ž ๋ฐฐ์—ด์„ ๋Œ€์ž…ํ•ด์ฃผ๋ฉด ์ž…๋ง›์— ๋งž๊ฒŒ ์ ์„ ์„ ๊ทธ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์€ nil์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์‹ค์„ ์œผ๋กœ ๋ณด์ธ๋‹ค. ์ ์ ˆํ•˜๊ฒŒ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ฆฌ๋ ค๋Š” view์˜ ํ•˜์œ„ ๋ทฐ๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ์™„์„ฑ์ด๋‹ค. dash..
ยท๐ŸŽ iOS & Swift
์š”์ƒˆ ๋‹ค์‹œ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋กœ UI๋ฅผ ์งœ๊ณ , ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์†ํŠธ ์„ธ๋ฏธ๋‚˜ ํ•  ๋•Œ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๋ดค๋Š”์ง€ ์ž ์‹œ ๋ฉ€๋ฆฌ ํ•  ๋•Œ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์„ ์Šค์Šค๋กœ ํ–ˆ๋‹ค... ์ถฉ๋ถ„ํžˆ ๋งŽ์ด ๋ดค์–ด...๐Ÿ‘‹ ์‚ฌ์‹ค ์ฝ”๋“œ ๋ฒ ์ด์Šค๋กœ UI๋ฅผ ์งค ๋•Œ ํ•ญ์ƒ ๊ณ ๋ฏผ์„ ํ–ˆ๋˜ ๋ถ€๋ถ„์€ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์ƒˆ์‹น ๊ณผ์ œ์ธ Diary ์•ฑ์„ ๋งŒ๋“ค๋ฉด์„œ ๋ฌธ๋“ ๋˜ ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ์Šคํƒ€์ผ์„ ์ข€ ๋ฐ”๊พธ๋ ค๊ณ  ์‹œ๋„ํ•ด๋ณด์•˜๋‹ค. Then (Syntax Sugar Library)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฐ€์ • ํ•˜์— UI ์งœ๋Š” ์Šคํƒ€์ผ์„ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด์ž. 1. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ์— ํด๋กœ์ €๋กœ ์†์„ฑ๊นŒ์ง€ ์ง€์ •ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ• UI ๊ฐ์ฒด๊ฐ€ ๋ช‡ ๊ฐœ ์—†๋‹ค๋ฉด ์˜คํžˆ๋ ค ๊น”๋”ํ•˜๊ณ  ๊ฐ€๋…์„ฑ๋„ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. let blackView = UIView().then { $0.ba..
ยท๐ŸŽ iOS & Swift
๋ชจ๋“ˆ์„ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋‚ฌ๋‹ค. overriding non-open instance method outside of its defining module import UIKit open class BaseView: UIView { public override init(frame: CGRect) { super.init(frame: frame) configureAttributes() configureLayout() } @available(*, unavailable) public required init?(coder: NSCoder) { super.init(coder: coder) } public func configureAttributes() {} public func confi..
ยท๐ŸŽ iOS & Swift
๋“ค์–ด๊ฐ€๋ฉฐ Notification์€ ๊ฐ’, ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•  ๋•Œ ์ •๋ง ์œ ์šฉํ•œ ๋…€์„์ด๋‹ค. ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๋„ ๋˜๊ฒŒ ๋‹จ์ˆœํ•œ๋ฐ ์จ์•ผ ํ•  ์ฝ”๋“œ๊ฐ€ ๊ณณ๊ณณ์— ํผ์ ธ์žˆ๊ณ , ๋งŽ์ด ์“ฐ๋‹ค๋ณด๋ฉด ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค. ์ ์ ˆํ•  ๋•Œ ์“ฐ๋ฉด ์ฐธ ์ข‹์€ ์นœ๊ตฌ... (ํŠนํžˆ ๊ณ„์ธต์ด ๋ณต์žกํ•  ๋•Œ ์“ฐ๋ฉด ๊ฟ€์ด๋‹ค ๐Ÿฏ) ์˜ค๋Š˜ ๊ทธ๋ž˜์„œ ๋‹จ์ˆœํ•˜๊ฒŒ ์žฅ์  ์„ค๋ช…ํ•˜๋ ค๊ณ  ๊ธ€์„ ์“ฐ๊ฒŒ ๋œ ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ๋ถˆํŽธํ–ˆ๋˜ ์ ์„ ๊ฐœ์„ ํ•ด ๋ณธ ๊ฒƒ์„ ๊ธฐ๋กํ•˜๊ณ ์ž ํ•œ๋‹ค. (์•„ ๊ทธ๋ฆฌ๊ณ  ๊ธ€ ์“ฐ๋‹ค ๋ณด๋ฉด ๋งํˆฌ๊ฐ€ ์ •๋ง ์˜ค๋ฝ๊ฐ€๋ฝ ํ•œ๋ฐ ์ดํ•ดํ•ด์ฃผ์‹œ๊ธธ ... ๊ธ€ ์ข€ ๋” ์จ๋ณด๊ณ  ํ•œ ๊ฐ€์ง€๋กœ ์ •์ฐฉํ•ด์•ผ๊ฒ ๋‹ค.) ๋ถˆํŽธํ–ˆ๋˜ ์  ๋ถˆํŽธํ–ˆ๋˜ ์ ์€ Notification.Name ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ๋ฌธ์ž์—ด์„ post ํ•˜๋Š” ์ชฝ๊ณผ addObserving ํ•˜๋Š” ์ชฝ์„ ์ •ํ™•ํžˆ ๋งž์ถฐ์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ํœด๋จผ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ณ , ์ฝ”๋“œ๊ฐ€ ๊ณณ..
ยท๐ŸŽ iOS & Swift
PageViewController ์ด์Šˆ PageViewController๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์Šˆ๋ฅผ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋‹ค. ํ•ด์„์„ ์กฐ๊ธˆ๋งŒ ํ•ด๋ณด๋ฉด ์‰ฝ๊ฒŒ ๋ฌธ์ œ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. Issue Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The number of view controllers provided (3) doesn't match the number required (1) for the requested transition' View Controller๊ฐ€ ํ•„์š” ์ด์ƒ์œผ๋กœ ํ• ๋‹น๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 1๊ฐœ๋งŒ ํ•„์š”ํ•œ๋ฐ 3๊ฐœ๋‚˜ ๋„ฃ์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๐Ÿ˜… ๊ธฐ์กด ์ฝ”๋“œ // PageViewController.swift impo..
taeeekki
'๐ŸŽ iOS & Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)