IBInspectable, IBDesignable ์คํ ๋ฆฌ๋ณด๋๋ก ์์
์ ํ๋ค๋ณด๋ฉด ์ธ์คํํฐ์์ ์์ฑ๊ฐ์ ์กฐ์ ํ๋ ์ผ์ด ๋ง์๋ฐ ํ๋ ๊ฐ์ฅ ๊ท์ฐฎ์๋ ๊ฒ์ border ๊ฐ์ ์ค์ ํ๋ ๊ฒ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ค๋ ๊ฒ์ด๋ค. border ๊ฐ์ ๋งค๋ฒ ์ฝ๋๋ก ๋ช ์ค์ฉ ์ง๋ ๊ฒ๋ณด๋ค ์ธ์คํํฐ ์ฐฝ์์ ์ค์ ํ ์ ์์ผ๋ฉด ์ผ๋ง๋ ์ข์๊น? IBInspectable๊ณผ IBDesignable ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ด์ฉํ๋ฉด ๊ทธ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ ์ ์๋ค. ์ธํฐํ์ด์ค ๋น๋์์ ์ค์๊ฐ์ผ๋ก ๊ฐ์ฒด์ ์์ฑ์ ์ ์ฉํ๊ณ ํ์ธ ๊ฐ๋ฅ ๋ฐํ์์ด ์๋๋ผ ์ปดํ์ผ ํ์์ ํ์ธ ๊ฐ๋ฅ ๋ฐ๋ก ๋ฐ์์ด ์ ๋ ์ ์์ // ์ธํฐํ์ด์ค ๋น๋ ์ธ์คํํฐ ์์ญ Show @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRa..
์ ์ฒด ๊ธ
๐ฑiOS ๊ฐ๋ฐ์๋ฅผ ๊ฟ๊พธ๋ ํ์์ด ๋ง๋๋ ๋ธ๋ก๊ทธ์์ ๊ด๋ฆฌ, API Key ๊ด๋ฆฌ enum ์ธ์คํด์ค ์์ฑ ๋ถ๊ฐ case rawValue โ ์ค๋ณต ๋ถ๊ฐ static let โ ์ฌ๋ฌ ๊ณณ์์ ์ ๊ทผ, ํ ๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ฉด ์ข
๋ฃ๋ ๋๊น์ง ๋จ์์์ struct ์ธ์คํด์ค ์์ฑ ๊ฐ๋ฅ ์ธ์คํด์ค ์์ฑ์ ๋ง์ผ๋ ค๋ฉด init()์ privateํ๊ฒ ์ ์ดํด์ฃผ๋ฉด ๋จ URL Endpoint ๋ถ๋ฆฌํ๊ธฐ ์์ ์๋ ๋จ์ํ๊ฒ ํ์
ํ๋กํผํฐ๋ฅผ ์ด์ฉํด์ ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ฒ๋ผ URL์ ๊ด๋ฆฌํ์๋๋ฐ ๋ค์๊ณผ ๊ฐ์ด enum์ ์ด์ฉํด์๋ URL์ ๊ด๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ๋ค. Endpoint๋ก ํ์ผ๋ช
์ ์ง๋ ๊ฒ์ ์ข์ ๊ฒ ๊ฐ๋ค. Moya๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, Alamofire ๋๋ URLSession์ ๋ชจ๋ํํด์ ์ฌ์ฉํ ๋๋ Endpoint๋ผ๋ ์ด๋ฆ์ผ๋ก ํ์ผ์ ๋ง๋ค๊ณ URL์ ๊ด๋ฆฌํ๋ ๊ฒ ๊ฐ๋ค. enum En..
ํด๋ก์ ํจ์์ ํํ์ ํจ์์ ํธ์ถ ๊ตฌ์กฐ๋ฅผ ์ ์ดํดํ๋ค๋ฉด ์ฝ๊ฒ ๋ฐ์๋ค์ผ ์ ์์ ๊ฒ ๊ฐ๋ค. // ๋ค์๋ ์ ๊ตฌ๋ถํ ์ ์์ผ๋ฉด ํด๋ก์ ์ ์ดํด๋ฅผ ๋์ธ ์ ์๋ค. func example() {} example // ํจ์ ์์ฒด example() // ํจ์ ํธ์ถ ํด๋ก์ ๊ธฐ๋ณธ ๊ตฌ์กฐ ํด๋ก์ ํค๋์ ํด๋ก์ ๋ฐ๋ ๋ถ๋ถ์ ์ ์ดํดํ์. { (๋งค๊ฐ ๋ณ์) -> ๋ฆฌํด ํ์
in// ํด๋ก์ ํค๋ ์คํ ๊ตฌ๋ฌธ// ํด๋ก์ ๋ฐ๋ } ์ธ๋ผ์ธ ํด๋ก์ (inline closure) // ์ฝ๋๋ฅผ ์๋ตํ์ง ์๊ณ ํด๋ก์ ๊ตฌ๋ฌธ ์, ํจ์์ ๋งค๊ฐ๋ณ์ ๋ด์ ํด๋ก์ ๊ฐ ๊ทธ๋๋ก ๋ค์ด๊ฐ ํํ // => ์ธ๋ผ์ธ ํด๋ก์ getStudyWithMe(study: { () -> () in print("์ฃผ๋ง์๋ ๊ณต๋ถํ๊ธฐ") }) ํธ๋ ์ผ๋ง ํด๋ก์ (trailing clo..

์๋ฒ ํต์ ์ ์
์ ๋ณด์ฌ์ค UIImage ๋ณํ ์์ urlString โถ๏ธ url โถ๏ธ image url๋ก ๋ฐ๊พธ๊ณ ๋๋ image๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์ ์ด๋์์ ์งํํ๋ ๊ฒ์ด ์ข์๊น? ์๋ฒ ํต์ ์์ ์์ ํ ์ง => ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๊ณ , ์ฌ์ฉ์๊ฐ ๋ณด์ง ์์ ์ ์๋ ์ ๋ณด์ ๋ํด์๋ ์์
์ ์งํํ ์ ์์ด์ ๋นํจ์จ์ ์
์์ ์ฒ๋ฆฌํ ์ง => ์กฐ๊ธ ๋ ์ ์ ํด๋ณด์ธ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฒ ํต์ ์ ์
์์ ํ ๊ฒฝ์ฐ ์
์ด ๊บผ๋ด์ง ๋๋ง๋ค ์์ฒญ์ด ๋ค์ด๊ฐ call ์๊ฐ ์ฆ๊ฐํ ์ ์๋ค. Alamofire์ ๋ฐ์ดํฐ ๋ฐ์์ค๋ ๋ฉ์๋(Response Handler) // Response Handler - Unserialized Response func response(queue: DispatchQueue = .main, completionHa..

๋ณธ ๊ธ์ WWDC ๋ฅผ ๋ณด๊ณ , ๋ฒ์ญ ๋ฐ ์์ฝ ๊ทธ๋ฆฌ๊ณ ์คํํด๋ณด๋ ์คํฐ๋ ํ๋ก์ ํธ์ ์ผํ์
๋๋ค. Introducing Combine WWDC19์๋ Apple์ ์ต์ Framework์ธ Combine์ ์๊ฐํฉ๋๋ค. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด์ ์ด์ผ๊ธฐํ์๊ณ ํ๋ฉด์ ์๋ง์ ์ฌ๋๋ฐ์. ๊ฐ์ด ์์๋ฅผ ๋ณด๊ณ ์ดํดํ๋ฉด์ Combine์ ๋ํด์ ์์๋ณด๋๋ก ํฉ์๋ค. ๊ฐ๋จํ ํ์๊ฐ์
ํ๋ฉด์ ์์๋ก ๋ญ๋๋ค. ์ด ํ๋ฉด์์์ ์๊ตฌ์ฌํญ์ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฐ์ ์ฌ์ฉ์ ์ด๋ฆ์ด ์ ํจํ์ง ๋คํธ์ํฌ์ ์์ฒญ์ ํด์ ํ์ธ์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น๋ฐ๋ฒํธ๊ฐ ์๋ก ์ผ์นํ๋์ง ํ์ธ์ ํฉ๋๋ค. ์ด ๋ชจ๋ ์์
์ ๋ฉ์ธ ์ค๋ ๋์์ ์ฐจ๋จ๋์ง ์๊ณ ๋ฐ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค. ๋จผ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์
๋ ฅํ๊ธฐ ์์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ด๋ฏธ ๋ง์ ๋น๋๊ธฐ ์์
์ด ์ง..

์ธ์ฆํค์ gitignore ํญ์ gitignore๋ ๋จผ์ ์ฒ๋ฆฌํ์. ์ดํ์ ์ธ์ฆํค๋ฅผ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ฉด commit์๋ ๋จ์์๊ณ , ์ด์ ๊ธฐ๋ก์ ๋จ์์์ผ๋ฏ๋ก ๋ฒ๊ฑฐ๋กญ๋ค. ํ๋ก์ ํธ ๋ด์์ empty ํ์ผ ์์ฑ ํ ํ๋ก์ ํธ ๋ฐ๋ก ๋ฐ์ .gitignore ์์ฑ ๊ฐ๋ฅ ํ์
์์๋ property list, configuration์ ์ด์ฉํ๋ ์์ผ๋ก๋ ์ธ์ฆํค๋ฅผ ๊ด๋ฆฌํ๋ค. ์จ๊ฒจ์ผ ํ๋ ํ์ผ์ด ๋ง์ผ๋ฉด public repository๊ฐ ์ ํฉํ์ง๋ถํฐ ํ๋จํ์. gitignore.io์ ๊ฐ๋ฉด ์ฝ๊ฒ ํ์ผ์ ๋ค์ด๊ฐ ๋ด์ฉ์ ๋ง๋ค ์ ์๋ค. ์จ๊นํ์ผ๋ก ์ ๋ฑ๋กํ๋ฉด ํ๋ก์ ํธ ๋ด์ ํ์ผ ์์ A(์ถ๊ฐ)/M(์์ ) ๋งํฌ๊ฐ ๋จ์ง ์๋๋ค. Type Inference์ Type Annotation ์๋ ์ฐจ์ด Type Annotation์ ์ด์ฉํ๊ธฐ..
App Transport Security Apple ์ธก์์๋ ์ฑ ์์ฒด์ ๋ณด์์ฑ์ ์ํด์ ATS(App Transport Security)๋ผ๋ ์ ์ฑ
์ ํตํด ๊ธฐ๋ณธ์ ์ผ๋ก https ํต์ ์ ํ๋๋ก ์ ๋ํ๊ณ ์๋ค. ๊ทธ๋์ http ์๋ฒ์ ํต์ ์ ํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. http ์๋ฒ๋ก ํ
์คํธํ๋ ค๋ฉด Info.plist์์ ATS ๊ด๋ จ ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค. ATS๋ iOS 9 ๋ฒ์ ์ดํ๋ถํฐ ์ ์ฉ๋ ๊ฐ์ธ์ ๋ณด๋ณดํธ ๊ธฐ๋ฅ์ด๊ณ , Xcode 7 ๋ฒ์ ์ด์์์ ์ฑ ์์ฑ ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ฐ์ ธ๊ฐ๊ฒ ๋๋ ๋ณด์ ์ ์ฑ
์ด๋ค. http : Allow Arbitrary Loads๋ฅผ YES๋ก ๋ณ๊ฒฝ https : ๊ตณ์ด ์ค์ ์ ํด์ค ํ์๊ฐ ์์ ๋ฐ์ดํฐ ๋ฆฌ๋ก๋ ์์ ํ
์ด๋ธ ๋ทฐ๋ ์ปฌ๋ ์
๋ทฐ ์ฌ์ฉ ์ viewDidLoad ์์ ์ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ..
ํ๋กํ ์ฝ๊ณผ String(describing: _)์ฌ์ฉํด์ ๋ฆฌํฐ๋ดํ ๊ฐ ๋์ด๋ด๊ธฐ ๊ทธ ๋์ identifier ๊ฐ์ ์ฐ๋ ๊ณณ์ด ์ ๋ง ๋ง์๋ค. ViewController์ TableViewCell, CollectionViewCell ๋ฑ์์ ๋ง์ด ์ฌ์ฉํ์๋ค. ๋งค ํด๋์ค์์ ํ๋์ฝ๋ฉ๋ ๋ฌธ์์ด ๊ฐ์ ๋ฃ๋ ๋์ ํ๋กํ ์ฝ์ ์ด์ฉํ๋ฉด ๋ถํธํจ๊ณผ ๋ฐ๋ณต์ ์ค์ผ ์ ์๋ค. protocol Reusable: Anyobject { static var reuseidentifier: String { get } } ๋ค์๊ณผ ๊ฐ์ด extension์์ ํ๋กํ ์ฝ์ ์ฑํํ๊ฒ ๋๋ฉด, ์ด์ reuseidentifier๋ฅผ ํธํ๊ฒ ์ ๊ทผํด์ ์ฌ์ฉํ ์ ์๋ค. extension UIViewController: ReusableViewProtocol { /..