BaseViewController ์ฌ์ค ์ด์ ์๋ BaseViewController๋ฅผ ๋ง๋ค์ด์ ์๋ธํด๋์ฑํ๋ ์์
์ ํด์์๋๋ฐ ์ด๋ ์๊ฐ ํ๋กํ ์ฝ์ ์ฐ๋ ๊ฒ ์ข๋ค๋ ์ฃผ๋ณ ๋ง์ด ๋ง์ด ๋ค๋ ธ๋ค. ๊ทธ๋์ ๊ทธ๋ฐ๊ฐ๋ผ๋ ์๊ฐ์ ๋๋ ๋ฉ๋ฌ์ ํ์๋๋ฐ, ์์์ ํ๋ ๊ตฌ์กฐ๊ฐ ๋ฌด์์ ๋์๋ค๋ ์๊ฐ์ ํ๋ ๊ฒ์ด ์คํ๋ ค ์๋ชป๋์ง ์์๋๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ์ด์ฐจํผ ์์์ ํ๋์ ํด๋์ค๋ง ํ ์ ์๊ณ , ๋ชจ๋ ์ปจํธ๋กค๋ฌ์์ ๊ณตํต์ ์ผ๋ก ์ฐ์ฌ์ผ ํ๋ ๋ด์ฉ์ด๋ผ๋ฉด ํ๋์ BaseViewController๋ก ์์๋ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋ซ์ง ์๋ ์๊ฐ์ด ๋ ๋ค. ๊ฐ์ธ์ ์ผ๋ก ๊ทธ ์ธ์ ์ธ ๊ฒ๋ค์ ํ๋กํ ์ฝ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ ๋ง๋ ๊ฒ ๊ฐ๋ค. ์์๊ณผ ํฉ์ฑ์ ์ ์ ํ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ ์ ํ ๊ฒ ๊ฐ์๋ฐ ๊ทธ ์ ๋๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ ๋ง ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค. BaseView..
๐ฑ SeSAC
ํ์
ํ์ธ type(of: x) type(of: value) ํ ๋ณํ - ํ์
๋ณํ ์ด๊ธฐํ ๊ตฌ๋ฌธ ์ฌ์ฉ ์ด๋์
๋ผ์ด์ ๊ตฌ๋ฌธ์ ํตํด์ ์๋กญ๊ฒ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ let value = String(a) ํ์
ํ์ธ ์ฐ์ฐ์ is ์ด๋ค ํด๋์ค์ ์ธ์คํด์ค ํ์
์ธ์ง, ์ด๋ค ๋ฐ์ดํฐ ํ์
์ธ์ง ํ์ธํ ๋ ์ฌ์ฉ class Mobile { let name: String var introduce: String { return "\(name) ์
๋๋ค." } init(name: String) { self.name = name } } class Apple: Mobile { let wwdc = "WWDC22" } class Google: Mobile {} mobile is Mobile mobile is Apple mobile is G..
FrameBaseLayout FrameBaseLayout + AutoResizing ์์ฆ์๋ ํด๋น ๋ฐฉ์์ผ๋ก๋ ๊ธฐ๊ธฐ๋ฅผ ์ ๋ถ ๋์ํ๊ธฐ ์ด๋ ค์์ง view.addSubview(emailTextField) // ํฌ๊ธฐ์ ์์น ๋ฐ ์์ฑ ์ ์ emailTextField.frame = CGRect(x: 50, y: 50, width: UIScreen.main.bounds.width - 100, height: 50) emailTextField.borderStyle = .line emailTextField.backgroundColor = .lightGray AutoLayout AutoLayout (๊ธฐ๊ธฐ๋ณ ๋์ ํ์) + NSLayoutConstraints Class(- base) AutoLayout ์์
์ AutoResi..
๊ธฐ์ ์ปจํผ๋ฐ์ค ๊ธฐ์ ์ปจํผ๋ฐ์ค, ๋ธ๋ก๊ทธ ์์ฃผ ๋ณด๊ธฐ! wwdc if kakao slash tech blog ๋ชจ๋ํ์ ์ ๊ทผ ์ ์ด ๋ชจ๋ํ ์์
์ ํ๋ค๋ณด๋ฉด ์ฌ๋ฌ ํ๋ก์ ํธ์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ์์ ์ ์๋ค. UI ์ปดํฌ๋ํธ, ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ํด๋์ค ๋ฑ๋ฑ์ด ์์ํ
๋ฐ ์ด๋ฅผ ๋งค ํ๋ก์ ํธ ๋ด์์ ์ง์ ์์ฑํด์ฃผ๋ ๊ฒ๋ณด๋ค ๋น์ทํ ์ฑ๊ฒฉ์ ์ฝ๋๋ผ๋ฆฌ ๋ชจ์์ ์ข ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ ๊ฒ์ด๋ค. ํ๋ ์์ํฌ๋ฅผ ๋ง๋ ๋ค๊ณ ๋ ์ดํดํด๋ณผ ์ ์์ ๋ชจ๋ํ๋ฅผ ํด๋ณด๋ฉด ์ ๊ทผ ์ ์ด์ ๋ํ ๊ฐ๋
์ด ์กฐ๊ธ ๋ช
ํํด์ง (- ์ค์ ๋ก ๋ด๊ฐ EasyKit์ด๋ผ๋ ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค์ด๋ณด๋ฉด์ ๋๊ผ๋ ๋ถ๋ถ์ด๋ค.) ์ค์ ํ๋ก์ ํธ๋ ์กฐ๊ธ ๊ฐ๋ฒผ์์ง ๊ฐ๊ฐ ์ญํ ์ ๋ํ ๋ถ๋ฆฌ๊ฐ ๋ช
ํํด์ง ์์ฃผ ์ฌ์ฉํ๋ ์ฝ๋, UI ๋ชจ์๋๊ธฐ ์ ๊ทผ ์ ์ด ์ด๋ก ์ ์ผ๋ก ์ ๋ฆฌํ๋ ๊ฒ๋ ์ค์ํ์ง๋ง..
๋์๋ณด๋ฉฐ ์์น ๊ณผ์ ์ ์์ํ๊ณ ๋ฒ์จ 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..