ios 7

[iOS / Uikit] ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ํ•ด๋ณด์ž! (MoyaํŽธ)

iOS ํ”„๋กœ์ ํŠธ์—์„œ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ๋” ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Moya ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ! ํ•ด๋‹น ๊ธ€์€ ํ•จ๊ป˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ํŒ€์›๋“ค์„ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค โœŒ๏ธMoya๊ฐ€ ๋ชจ์•ผ? ๐Ÿคท‍โ™€๏ธ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ… URLSession์„ ๋” ๊น”๋”ํ•˜๊ณ  ๊ตฌ์กฐ์ ์œผ๋กœ ์“ฐ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„คํŠธ์›Œํฌ ์ถ”์ƒํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ˆ์š”! ์š”์ฒญ ๋งŒ๋“ค๊ธฐ / ์‘๋‹ต ์ฒ˜๋ฆฌ / ์—๋Ÿฌ ํ•ธ๋“ค๋ง / ๋กœ๊ทธ ์ถœ๋ ฅ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋ณด๊ธฐ ์ข‹๊ณ  ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ๊ทธ๋Ÿผ ์ด์ œ๋ถ€ํ„ฐ ๋„คํŠธ์›Œํฌ ์„ธํŒ… ๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณผ๊นŒ์œ ? ๐Ÿ‘‡๐Ÿ“Œ 1. BaseTargetType — ๊ณตํ†ต ์„ค์ • ๋ชจ์•„๋‘๊ธฐ//// BaseTargetType.swift//import Foundationimport Moyaprotocol BaseTargetType: TargetType { }extension B..

[iOS / Uikit] ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋ž ๊ตฌํ˜„ํ•˜๊ธฐ :interactiveMovement

์ตœ๊ทผ์— ๋ฉœ๋ก ๋ฎค์ง ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋Š”๋ฐ์š”!ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ปฌ๋ ‰์…˜๋ทฐ์—์„œ ์…€ ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์…€ ๋‚ด๋ถ€์˜ ํŠน์ • ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ๋งŒ ๋“œ๋ž˜๊ทธ์•ค๋“œ๋ž์ด ๋™์ž‘ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. UIKit์—์„œ Drag & Drop์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์–ด์š”.1. UICollectionViewDragDelegate์™€ UICollectionViewDropDelegate๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹2. LongPress ์ œ์Šค์ฒ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ณผ๊นŒ์š”?1) UICollectionViewDragDelegate · UICollectionViewDropDelegate ์‚ฌ์šฉUIKit์—์„œ ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” Drag & Drop ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.iOS 11 ์ดํ›„๋กœ ๋„์ž…๋œ ์‹œ์Šคํ…œ ์ธํ„ฐ๋ž™์…˜์ด๋ผ ๊ธฐ๋ณธ ์ œ์Šค์ฒ˜์™€ ..

[iOS / Swift] Codable & CodingKeys

๐ŸŽ Codable์ด๋ž€?Swift์—์„œ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ, ์„œ๋ฒ„์˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์šฐ๋ฆฌ ์•ฑ์˜ ๊ตฌ์กฐ์ฒด๋‚˜ ํด๋ž˜์Šค ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Codable์ž…๋‹ˆ๋‹ค! ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด Codable์€ ์ž์‹ ์„ ์™ธ๋ถ€ ํ‘œํ˜„์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜(Encode),์™ธ๋ถ€ ํ‘œํ˜„์œผ๋กœ๋ถ€ํ„ฐ ์ž์‹ ์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”(Decode) ํƒ€์ž…์ด์—์š”.์ฆ‰, Swift์˜ ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜, JSON์„ Swift ๊ฐ์ฒด๋กœ ๋ฐ”๊พธ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ธ๊ฑฐ์ฃ . Codable์€ ์‚ฌ์‹ค ๋‘ ๊ฐœ์˜ ํ”„๋กœํ† ์ฝœ์ด ํ•ฉ์ณ์ง„ ํ˜•ํƒœ์ธ๋ฐ์š” !ํ”„๋กœํ† ์ฝœ์—ญํ• Encodable์ž์‹ ์„ JSON ๊ฐ™์€ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋กœ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Decodable์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์‹ ์œผ๋กœ ๋””์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.CodableEncodable + Decod..

[iOS / Swift] Optional์ด๋ž€?

Optional์ด๋ž€?Optional์€ ๋ณ€์ˆ˜์— ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์„ ์ˆ˜๋„(nil) ์žˆ๋‹ค๋Š” ๊ฑธ ๋‚˜ํƒ€๋‚ด๋Š” ํƒ€์ž…์ด์—์š”.์ฆ‰, “์ด ๋ณ€์ˆ˜๋Š” ์•„์ง ๊ฐ’์ด ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค”๋Š” ๊ฑธ Swift์—๊ฒŒ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ฃผ๋Š” ๊ฑฐ์ฃ .์ด๋ ‡๊ฒŒ nil์„ ๋Œ€์ž…ํ•˜๋ ค๊ณ  ํ•ด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ์š”. var name: String? = nilname = "์˜๋Œ์ฟค"์ด๋•Œ ?๋ฅผ ๋ถ™์—ฌ ์„ ์–ธํ•ด์•ผ nil์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ €๋Š” ์ฒ˜์Œ ์˜ต์…”๋„์„ ๋ฐฐ์šธ ๋•Œ ์Šˆ๋ขฐ๋”ฉ๊ฑฐ์˜ ๊ณ ์–‘์ด๋ผ๋Š” ๋น„์œ ๋ฅผ ๋“ค์—ˆ๋Š”๋ฐ ๊ณต๊ฐ์ด ๊ฐ€๋”๋ผ๊ตฌ์š”. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฑธ ๊ทธ๋ƒฅ print ํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋‚˜์˜ต๋‹ˆ๋‹ค.Optional("์˜๋Œ์ฟค")์ด๋Œ€๋กœ๋Š” ์“ธ ์ˆ˜ ์—†๊ฒ ์ฃ ! ๊ทธ๋ž˜์„œ ์˜ต์…”๋„์€ ‘๊ฐ’์„ ๊บผ๋‚ด๋Š” ๊ณผ์ •(์–ธ๋ž˜ํ•‘)’์ด ๊ผญ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 1. ๊ฐ•์ œ ์–ธ๋ž˜ํ•‘ (Forced Unwrapping)var name: String? =..

[iOS / Swift] ์ ‘๊ทผ ์ œ์–ด์ž(Access Control Levels)

์ ‘๊ทผ ์ œ์–ด์ž๋ž€?์ ‘๊ทผ ์ œ์–ด(Access Control)๋Š” ์ฝ”๋“œ๊ฐ€ ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ ๋ชจ๋“ˆ(module) ๊ฐ„, ์†Œ์Šค ํŒŒ์ผ(source file) ๊ฐ„์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.Swift์˜ ์ ‘๊ทผ ์ œ์–ด๋Š” ๋ชจ๋“ˆ๊ณผ ์†Œ์Šค ํŒŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.์—ฌ๊ธฐ์„œ ์†Œ์Šค ํŒŒ์ผ์ด๋ž€ ํ•˜๋‚˜์˜ Swift ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ(.swift)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ ๋ชจ๋“ˆ(module)์ด๋ž€?๋ชจ๋“ˆ(module)์€ ํ•˜๋‚˜์˜ ์ฝ”๋“œ ๋ฐฐํฌ ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.ํ”„๋ ˆ์ž„์›Œํฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‘ ๋ชจ๋“ˆ ๋‹จ์œ„๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” import ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ,๋ฐ˜๋Œ€๋กœ import๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ชจ๋‘ ๋ชจ๋“ˆ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์˜ˆ: UIKit, Foundation, SwiftUI ๋“ฑ Swift์—์„œ๋Š” ์ด ๋‹ค์„ฏ ๊ฐ€..

[iOS / Swift] final ํ‚ค์›Œ๋“œ์™€ ์„ฑ๋Šฅ์  ์ด์ ์— ๋Œ€ํ•ด์„œ

final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ final ํ‚ค์›Œ๋“œ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ์† ๊ฐœ๋…์„ ๋จผ์ € ์งš๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ ์ƒ์†(Inheritance)์ƒ์†์€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.Swift์—์„œ๋Š” ํด๋ž˜์Šค(class)๋งŒ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ตฌ์กฐ์ฒด(struct)๋‚˜ ์—ด๊ฑฐํ˜•(enum)์€ ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ธฐ์กด ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ๋ฌผ๋ ค๋ฐ›์•„ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ƒ์†์ž…๋‹ˆ๋‹ค!class Developer { func introduce() { print("์ €๋Š” iOS ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.") }}class Zero: Developer { func coding() { print("๋ง‰๊ฑธ๋ฆฌ์กฐ ํ™”์ดํŒ…!") }}let ze = Zero()z..

[AT SOPT] 36๊ธฐ iOS ํŒŒํŠธ ํ•ฉ๊ฒฉ ํ›„๊ธฐ

๋„ˆ๋ฌด๋„ˆ๋ฌด ๋“ค์–ด๊ฐ€๊ณ  ์‹ถ์—ˆ๋˜ ์†ํŠธ!  ๋‚˜ ์—ญ์‹œ ์ง€์›์„œ๋ฅผ ์ค€๋น„ํ•˜๋ฉด์„œ ์ด์ „ ๊ธฐ์ˆ˜ ๋ถ„๋“ค์˜ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ๋งŽ์ด ์ฐธ๊ณ ํ–ˆ๊ธฐ์—,์ด๋ฒˆ์—๋Š” ๋‚ด๊ฐ€ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋งˆ์Œ์œผ๋กœ ์ง€์›๋ถ€ํ„ฐ ๋ฉด์ ‘๊นŒ์ง€์˜ ๊ณผ์ •์„ ๊ธฐ๋กํ•ด ๋ณธ๋‹ค.๐Ÿ“„ ์ง€์›์„œ ์ž‘์„ฑ์ง€์›์„œ = ์—ด์ •์ด๋‹ค! ๊ทธ๋ž˜์„œ ๋ชจ๋“  ๋ฌธํ•ญ์„ ๊ธ€์ž ์ˆ˜ ๊ฝ‰๊ฝ‰ ์ฑ„์›Œ์„œ ์“ฐ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค.๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด "์†ํŠธ ์ง€์›์„œ๋Š” ๋ถ„๋Ÿ‰์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค"๊ณ ๋“ค ํ–ˆ์ง€๋งŒ, ๋‚˜๋Š” ์˜คํžˆ๋ ค ๊ฐ ๋ฌธํ•ญ๋งˆ๋‹ค ์“ธ ๋ง์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์ค„์ด๋А๋ผ ๋” ํž˜๋“ค์—ˆ๋‹ค...โœ๏ธ ๊ณตํ†ต์งˆ๋ฌธ๋ชฉํ‘œ๋ฅผ ์ด๋ฃจ๊ธฐ ์œ„ํ•ด ๋ฐ˜๋ณต์ ์ธ ์‹œ๋„๋‚˜ ๊ธด ์‹œ๊ฐ„์ด ํ•„์š”ํ–ˆ๋˜ ๊ฒฝํ—˜ (700์ž)๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ‘์ข‹์€ ํŒ€’์˜ ์กฐ๊ฑด๊ณผ ๊ทธ๊ฑธ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋‚˜์˜ ๋…ธ๋ ฅ (800์ž)์ฃผ์–ด์ง„ ํ™˜๊ฒฝ์— ์•ˆ์ฃผํ•˜์ง€ ์•Š๊ณ  ๊ธฐํšŒ๋ฅผ ์ฐพ์•„๋‚˜์„  ๊ฒฝํ—˜ (700์ž)ํ˜‘์—… ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ์ธ์ƒ ๊นŠ์—ˆ๋˜ ํ”ผ๋“œ๋ฐฑ๊ณผ ๊ทธ ๋ณ€ํ™” (700์ž..

๋ฐ˜์‘ํ˜•