๐ŸŒฑ SeSAC

ยท๐ŸŒฑ SeSAC
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..
ยท๐ŸŒฑ SeSAC
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..
ยท๐ŸŒฑ SeSAC
๊ธฐ์ˆ  ์ปจํผ๋Ÿฐ์Šค ๊ธฐ์ˆ  ์ปจํผ๋Ÿฐ์Šค, ๋ธ”๋กœ๊ทธ ์ž์ฃผ ๋ณด๊ธฐ! wwdc if kakao slash tech blog ๋ชจ๋“ˆํ™”์™€ ์ ‘๊ทผ ์ œ์–ด ๋ชจ๋“ˆํ™” ์ž‘์—…์„ ํ•˜๋‹ค๋ณด๋ฉด ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. UI ์ปดํฌ๋„ŒํŠธ, ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค ๋“ฑ๋“ฑ์ด ์žˆ์„ํ…๋ฐ ์ด๋ฅผ ๋งค ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์ง์ ‘ ์ž‘์„ฑํ•ด์ฃผ๋Š” ๊ฒƒ๋ณด๋‹ค ๋น„์Šทํ•œ ์„ฑ๊ฒฉ์˜ ์ฝ”๋“œ๋ผ๋ฆฌ ๋ชจ์•„์„œ ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ ๋„ ์ดํ•ดํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ ๋ชจ๋“ˆํ™”๋ฅผ ํ•ด๋ณด๋ฉด ์ ‘๊ทผ ์ œ์–ด์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์กฐ๊ธˆ ๋ช…ํ™•ํ•ด์ง (- ์‹ค์ œ๋กœ ๋‚ด๊ฐ€ EasyKit์ด๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ๋Š๊ผˆ๋˜ ๋ถ€๋ถ„์ด๋‹ค.) ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋Š” ์กฐ๊ธˆ ๊ฐ€๋ฒผ์›Œ์ง ๊ฐ๊ฐ ์—ญํ• ์— ๋Œ€ํ•œ ๋ถ„๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•ด์ง ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ, UI ๋ชจ์•„๋†“๊ธฐ ์ ‘๊ทผ ์ œ์–ด ์ด๋ก ์ ์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ..
ยท๐ŸŒฑ SeSAC
๋Œ์•„๋ณด๋ฉฐ ์ƒˆ์‹น ๊ณผ์ •์„ ์‹œ์ž‘ํ•˜๊ณ  ๋ฒŒ์จ 30๋ฒˆ์งธ TIL์ด๋‹ค. (1, 2์ผ์ฐจ TIL์€ ์–ด์ฉŒ๋‹ค ๋ณด๋‹ˆ ๋นผ๋จน๊ฒŒ ๋˜์—ˆ์ง€๋งŒ) ์ฐธ ์‹œ๊ฐ„ ๋น ๋ฅด๋‹ค... ์ฒ˜์Œ์—๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์“ฐ๊ณ  ์‹ถ์–ด์„œ ๋ฏธ๋ฃจ๋‹ค๊ฐ€ ์ •๋ง ๋งŽ์ด ๋ฐ€๋ ธ์—ˆ๋Š”๋ฐ ์ด๋Ÿฌ๋‹ค๊ฐ€ ํ•˜๋‚˜๋„ ๋ชป ์“ธ ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•„๊ธฐํ•ด ๋’€๋˜ ๊ฑฐ ์งค๋ง‰ํ•˜๊ฒŒ ์˜ฌ๋ฆฌ๋Š” ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ๋ชจ์•„๋†“์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ ์ข‹์€ ์ž์‚ฐ์ด ๋˜์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค. (30์ผ์ฐจ๊นŒ์ง€ ๊ทธ๋ž˜๋„ ๋ช‡ ์ž ์ ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•œ ๊ฒƒ์€ ์นญ์ฐฌํ•œ๋‹ค.) ์—ฌ๊ธฐ์„œ ์ž์ฒด ํ”ผ๋“œ๋ฐฑ์„ ํ•˜์ž๋ฉด, TIL์€ ๊ทธ๋‚  ๊ทธ๋‚  ์“ฐ๋Š”๊ฒŒ ๋ฒ ์ŠคํŠธ์ธ ๊ฒƒ ๊ฐ™๊ณ  ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ–ˆ๋˜ ๋‚˜์˜ ์ƒ๊ฐ์„ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ์ ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณด์™„ํ•ด๋‚˜๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ ์กฐ๊ฐ๋„ ๋งŽ์ด ๋ชจ์•„๋†“์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค. ์‚ฌ์‹ค 30์ผ์ฐจ๊นŒ์ง€์˜ TIL์€ ๋‚ด์šฉ์„..
ยท๐ŸŒฑ SeSAC
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 ์„ค์ • (..
ยท๐ŸŒฑ SeSAC
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: ..
ยท๐ŸŒฑ SeSAC
IBInspectable, IBDesignable ์Šคํ† ๋ฆฌ๋ณด๋“œ๋กœ ์ž‘์—…์„ ํ•˜๋‹ค๋ณด๋ฉด ์ธ์ŠคํŽ™ํ„ฐ์—์„œ ์†์„ฑ๊ฐ’์„ ์กฐ์ •ํ•˜๋Š” ์ผ์ด ๋งŽ์€๋ฐ ํ•˜๋‚˜ ๊ฐ€์žฅ ๊ท€์ฐฎ์•˜๋˜ ๊ฒƒ์€ border ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. border ๊ฐ’์„ ๋งค๋ฒˆ ์ฝ”๋“œ๋กœ ๋ช‡ ์ค„์”ฉ ์งœ๋Š” ๊ฒƒ๋ณด๋‹ค ์ธ์ŠคํŽ™ํ„ฐ ์ฐฝ์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์–ผ๋งˆ๋‚˜ ์ข‹์„๊นŒ? IBInspectable๊ณผ IBDesignable ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ทธ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์ฒด์— ์†์„ฑ์„ ์ ์šฉํ•˜๊ณ  ํ™•์ธ ๊ฐ€๋Šฅ ๋Ÿฐํƒ€์ž„์ด ์•„๋‹ˆ๋ผ ์ปดํŒŒ์ผ ํƒ€์ž„์— ํ™•์ธ ๊ฐ€๋Šฅ ๋ฐ”๋กœ ๋ฐ˜์˜์ด ์•ˆ ๋  ์ˆ˜ ์žˆ์Œ // ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋” ์ธ์ŠคํŽ™ํ„ฐ ์˜์—ญ Show @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRa..
taeeekki
'๐ŸŒฑ SeSAC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)