UIButton.Configuration iOS 15.0๋ถํฐ ์ด์ฉ ๊ฐ๋ฅ Struct ํ์
๊ธฐ๋ณธ ์ ๊ณต Configuration ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ฒํผ ์คํ์ผ์ด ํ์
๋ฉ์๋ ํํ๋ก ๋ง๋ค์ด์ ธ์๋ค. Configuration ํ์ฅ ๋งค๋ฒ configuration์ ๋ฒํผ๋ง๋ค ๋ง๋ค์ด ์ฃผ๋๊ฒ ์ฝ๋ ๋ผ์ธ๋ ๊ธธ์ด์ง๊ณ ๊ท์ฐฎ์๋๋ฐ ๋ฉํ ๋๊ป์ ๋ง์ํด์ฃผ์ extension์ผ๋ก ํ์ฅํ๋ค๋ ๊ด์ ์ด ์ข์๋ค. ํ๋ก์ ํธ ๋ด์ ๋ฒํผ ์คํ์ผ์ด ๋ช ๊ฐ์ง ์๊ฑฐ๋ ์ผ์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค์ด์ฐ๋ ๊ฒ์ด ์ข์๋ณด์ธ๋ค. (๊ธฐ๋ณธ ์ ๊ณต ์คํ์ผ๊ณผ ๋์ผํ ์์ด๋์ด ์ธ ๊ฒ ๊ฐ๋ค.) ์งํ ์ค์ธ ํ๋ก์ ํธ ์์ ์์ง ์ค์ ๋ก ์ ์ฉํ์ง๋ ์์์ง๋ง, ํ๋ก์ ํธ ๋ด์ 3๊ฐ์ง ์คํ์ผ์ ๋ฒํผ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๊ทธ๋ฐ ๊ฒฝ์ฐ์ ์ด๊ฑฐํ(Enum)๊ณผ Configuration ํ์ฅ์ ..
๋์๋ณด๋ฉฐ ์์น ๊ณผ์ ์ ์์ํ๊ณ ๋ฒ์จ 30๋ฒ์งธ TIL์ด๋ค. (1, 2์ผ์ฐจ TIL์ ์ด์ฉ๋ค ๋ณด๋ ๋นผ๋จน๊ฒ ๋์์ง๋ง) ์ฐธ ์๊ฐ ๋น ๋ฅด๋ค... ์ฒ์์๋ ์๋ฒฝํ๊ฒ ์ฐ๊ณ ์ถ์ด์ ๋ฏธ๋ฃจ๋ค๊ฐ ์ ๋ง ๋ง์ด ๋ฐ๋ ธ์๋๋ฐ ์ด๋ฌ๋ค๊ฐ ํ๋๋ ๋ชป ์ธ ๊ฒ ๊ฐ์์ ๊ฐ๋จํ๊ฒ ํ๊ธฐํด ๋๋ ๊ฑฐ ์งค๋งํ๊ฒ ์ฌ๋ฆฌ๋ ํํ๋ก ๋ฐ๊พธ์๋ค. ๋์ค์ ๋ค์ ์ฐพ์๋ณผ ์ ์๋ ํค์๋๋ฅผ ๋ชจ์๋์๋ค๊ณ ์๊ฐํ๋ฉด ์ถฉ๋ถํ ์ข์ ์์ฐ์ด ๋์ง ์์๊น ์ถ๋ค. (30์ผ์ฐจ๊น์ง ๊ทธ๋๋ ๋ช ์ ์ ์ผ๋ ค๊ณ ๋
ธ๋ ฅํ ๊ฒ์ ์นญ์ฐฌํ๋ค.) ์ฌ๊ธฐ์ ์์ฒด ํผ๋๋ฐฑ์ ํ์๋ฉด, TIL์ ๊ทธ๋ ๊ทธ๋ ์ฐ๋๊ฒ ๋ฒ ์คํธ์ธ ๊ฒ ๊ฐ๊ณ ํค์๋๊ฐ ์๋ค๋ฉด ๊ทธ์ ๋ํด ๊ณ ๋ฏผํ๋ ๋์ ์๊ฐ์ ์ต๋ํ ๋ง์ด ์ ๋ ๋ฐฉ์์ผ๋ก ๋ณด์ํด๋๊ฐ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋ ์กฐ๊ฐ๋ ๋ง์ด ๋ชจ์๋์ผ๋ฉด ์ข๊ฒ ๋ค๊ณ ์๊ฐ์ด ๋ ๋ค. ์ฌ์ค 30์ผ์ฐจ๊น์ง์ TIL์ ๋ด์ฉ์..
MapView ์ธํฐํ์ด์ค ๋น๋ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ๋ฒ์ ์ฒดํฌํด๋ณด์ import MapKit // ํ๋ฉด์ MKMapView ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๊ณ ์์๋ ์ ์ฐ๊ฒฐํ์ @IBOutlet weak var mapView: MKMapView! let center = CLLocationCoordinate2D(latitude: 37.000000, longitude: 126.000000) // Region ์ค์ // ์ง๋ ์ค์ฌ ๊ธฐ๋ฐ์ผ๋ก ๋ณด์ฌ์ง ๋ฒ์ ์ค์ let region = MKCoordinateRegion(center: center, latitudinalMeters: 1000, longitudinalMeters: 1000) mapView.setRegion(region, animated: true) // Annotation ์ค์ (..
ReusableView Protocol ๊ธฐ์กด์ cell ๋ง๋ค id๋ฅผ ํ์
ํ๋กํผํฐ๋ก ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ด ํ๋กํ ์ฝ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ protocol ReusableViewProtocol { static var reuseIdentifier: String { get } } extension UICollectionViewCell: ReusableViewProtocol { static var reuseIdentifier: String { return String(describing: self) } } extension UITableViewCell: ReusableViewProtocol { static var reuseIdentifier: String { return String(describing: ..
IBInspectable, IBDesignable ์คํ ๋ฆฌ๋ณด๋๋ก ์์
์ ํ๋ค๋ณด๋ฉด ์ธ์คํํฐ์์ ์์ฑ๊ฐ์ ์กฐ์ ํ๋ ์ผ์ด ๋ง์๋ฐ ํ๋ ๊ฐ์ฅ ๊ท์ฐฎ์๋ ๊ฒ์ border ๊ฐ์ ์ค์ ํ๋ ๊ฒ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ค๋ ๊ฒ์ด๋ค. border ๊ฐ์ ๋งค๋ฒ ์ฝ๋๋ก ๋ช ์ค์ฉ ์ง๋ ๊ฒ๋ณด๋ค ์ธ์คํํฐ ์ฐฝ์์ ์ค์ ํ ์ ์์ผ๋ฉด ์ผ๋ง๋ ์ข์๊น? IBInspectable๊ณผ IBDesignable ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ด์ฉํ๋ฉด ๊ทธ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ ์ ์๋ค. ์ธํฐํ์ด์ค ๋น๋์์ ์ค์๊ฐ์ผ๋ก ๊ฐ์ฒด์ ์์ฑ์ ์ ์ฉํ๊ณ ํ์ธ ๊ฐ๋ฅ ๋ฐํ์์ด ์๋๋ผ ์ปดํ์ผ ํ์์ ํ์ธ ๊ฐ๋ฅ ๋ฐ๋ก ๋ฐ์์ด ์ ๋ ์ ์์ // ์ธํฐํ์ด์ค ๋น๋ ์ธ์คํํฐ ์์ญ Show @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRa..
์์ ๊ด๋ฆฌ, 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..