λΆ„λ₯˜ 전체보기

πŸ’» 개발/iOS

[iOS / SwiftUI] ν‚€λ³΄λ“œκ°€ 사라지지 μ•Šμ•„μš”...😩

SwiftUI Keyboard Dismiss μ–΄μ œ κ΅¬ν˜„ν•œ νŒ€ 과제λ₯Ό λ‹€μ‹œ ν•œ 번 κ΅¬ν˜„ν•˜λ˜ 도쀑에 좔가해보고 싢은 κΈ°λŠ₯이 μžˆμ—ˆλ‹€. μ‚¬μš©μž μž…λ ₯을 μ†Œν”„νŠΈ ν‚€λ³΄λ“œ ν˜Ήμ€ λ²„νŠΌμ„ ν†΅ν•΄μ„œ μž…λ ₯ λ°›λŠ”λ°, μ†Œν”„νŠΈ ν‚€λ³΄λ“œλ‘œ μž…λ ₯ 받은 κ²½μš°μ— Submit을 λˆ„λ₯΄μ§€ μ•Šκ³ , 뷰의 ν΄λ¦­ν•˜λ”λΌλ„ μ†Œν”„νŠΈ ν‚€λ³΄λ“œκ°€ λ‹«νžˆλ„λ‘ κ΅¬ν˜„ν•˜κ³  μ‹Άμ—ˆλ‹€. 1. Focused μš°μ„  이 κΈ°λŠ₯은 SwiftUI 3.0 (iOS 15) 이상뢀터 μ§€μ›ν•œλ‹€. 그런 탓인가 정말 κ°„λ‹¨ν•˜κ²Œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€. var body: some View { @State private var input: String = "" @FocusState private var isFocused: Bool // μƒλž΅... VStack { TextField("PlaceHolder", $i..

πŸ’» 개발/iOS

[iOS / SwiftUI] ForEach둜 Viewλ₯Ό λ¦¬νŽ™ν† λ§ ν•΄λ³ΌκΉŒμš”?

Swift UIμ—μ„œ ForEach둜 View μ—¬λŸ¬ 개 였늘 μŠ€ν„°λ””μ—μ„œ 날씨λ₯Ό λ³΄μ—¬μ£ΌλŠ” νŽ˜μ΄μ§€λ₯Ό Swift UI둜 κ΅¬ν˜„ν•˜λŠ” 과제λ₯Ό μ§„ν–‰ν–ˆλ‹€. HStackκ³Ό VStack을 ν™œμš©ν•΄μ„œ κ΅¬ν˜„ν•˜λŠ” κ³Όμ œμ˜€κ³  κ΅¬ν˜„ κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™λ‹€. ν•˜μ§€λ§Œ κ΅¬ν˜„μ„ μ™„λ£Œν•˜κ³  λ³΄λ‹ˆ λŒ€λΆ€λΆ„μ΄ ν•˜λ“œ μ½”λ”©λ˜μ–΄ μžˆμ–΄μ„œ κ²ΉμΉ˜λŠ” μ½”λ“œλ“€μ΄ λ§Žμ•„ 이λ₯Ό μˆ˜μ •ν•΄μ£ΌλŠ” μž‘μ—…μ„ μ§„ν–‰ν–ˆλ‹€. μ•„λž˜ 사진을 보면 빨간색 λ·° μ•ˆμ— μ΄ˆλ‘μƒ‰ 뷰듀이 같은 ν˜•νƒœλ‘œ λ°°μΉ˜λ˜μ–΄ μžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€. κΈ°μ‘΄μ—λŠ” HStack 내뢀에 VStack을 μ—¬λŸ¬ 개 λ°°μΉ˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν–ˆλŠ”λ°, 이λ₯Ό ForEachλ₯Ό ν™œμš©ν•΄μ„œ VStack을 μž¬μ‚¬μš©ν•˜λŠ” λ°©μ‹μœΌλ‘œ μˆ˜μ •ν–ˆλ‹€. 1. κΈ°μ‘΄ μ½”λ“œ struct DailyHourWeatherView: View { var body: some View { HS..

πŸ’» 개발/iOS

[iOS / Swift] lim ν΄λ‘œμ € -> 0 (ν΄λ‘œμ €, κ·Ήν•œμœΌλ‘œ 쀄여보기)

μ§€λ‚œ μ‹œκ°„μ— 개인적으둜 ν΄λ‘œμ €μ— λŒ€ν•΄μ„œ μ’€ 더 μ•Œμ•„λ΄€λŠ”λ° 였늘 κ°•μ˜μ—μ„œλŠ” ν΄λ‘œμ €μ— λŒ€ν•œ 진도λ₯Ό λ‚˜κ°”λ‹€. 볡슡 μ°¨μ›μ—μ„œ κ°•μ˜λ₯Ό λ“€μœΌλ©΄μ„œ λ‹€μ‹œ ν•œ 번 정리해봀닀. ν΄λ‘œμ € ν΄λ‘œμ €λŠ” κΈ°λŠ₯을 κ°–κ³  μžˆλŠ” μ½”λ“œ 블둝이닀. ν΄λ‘œμ €μ—μ„œλŠ” μƒμˆ˜μ™€ λ³€μˆ˜μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό μΊ‘μ³ν•˜κ³  μ €μž₯ν•  수 있으며 크게 3κ°€μ§€λ‘œ κ΅¬λΆ„ν•œλ‹€. μ „μ—­ ν•¨μˆ˜ 쀑첩 ν•¨μˆ˜ ν΄λ‘œμ € ν‘œν˜„μ‹ 1. μ „μ—­ ν•¨μˆ˜ 첫 번째둜 μ „μ—­ν•¨μˆ˜λŠ” μš°λ¦¬κ°€ ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ©΄μ„œ μ •μ˜ν•˜κ³  ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜λ“€μ΄λ‹€. func ν‚€μ›Œλ“œλ₯Ό 톡해 μ •μ˜ν•œλ‹€. μ „μ—­ν•¨μˆ˜λŠ” 이름을 가지고 있고 μ–΄λ– ν•œ 값도 μΊ‘μ³ν•˜μ§€ μ•ŠλŠ” ν΄λ‘œμ €μ΄λ‹€. func justFunction() -> String { return "KODO" } 2. 쀑첩 ν•¨μˆ˜ 두 번째둜 쀑첩 ν•¨μˆ˜λŠ” 이름을 가지고 λ‘˜λŸ¬μ‹Ό ν•¨μˆ˜λ‘œλΆ€ν„° 값을 캑쳐할 수 μžˆλŠ”..

πŸ’» 개발/iOS

[iOS / Swift] ν΄λ‘œμ €μ™€ ν”„λ‘œνΌν‹°, κ°€λ³κ²Œ μ•Œμ•„λ³΄κΈ°

ν΄λ‘œμ € ν΄λ‘œμ €λŠ” λ‹€μ–‘ν•œ ν˜•νƒœλ‘œ ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ‹€. ν›„ν–‰ ν΄λ‘œμ € : ν•¨μˆ˜μ˜ λ§ˆμ§€λ§‰ λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λ˜λŠ” ν΄λ‘œμ €λŠ” ν›„ν–‰ν΄λ‘œμ €λ‘œ, ν•¨μˆ˜ 밖에 κ΅¬ν˜„λ  수 μžˆλ‹€. λ°˜ν™˜ νƒ€μž… μƒλž΅ : μ»΄νŒŒμΌλŸ¬κ°€ ν΄λ‘œμ €μ˜ λ°˜ν™˜ νƒ€μž…μ„ μœ μΆ”ν•  수 μžˆλŠ” 경우, λ°˜ν™˜ νƒ€μž…μ„ μƒλž΅ν•  수 μžˆλ‹€. λ§€κ°œλ³€μˆ˜ 이름 μƒλž΅ : λ§€κ°œλ³€μˆ˜μ˜ 이름이 ν•„μš” μ—†κ³ , μ»΄νŒŒμΌλ‘œκ°€ νƒ€μž…μ„ μœ μΆ”ν•  수 μžˆλŠ” 경우, μΆ•μ•½λœ 전달 인자 ν˜•νƒœλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€. μ•”μ‹œμ  λ°˜ν™˜ : λ°˜ν™˜ 값이 μžˆλŠ” 경우, ν΄λ‘œμ €μ˜ 맨 λ§ˆμ§€λ§‰ μ€„μ—μ„œ return을 μƒλž΅ν•  수 μžˆλ‹€. 1. λ°˜ν™˜ νƒ€μž… μƒλž΅ calculate ν•¨μˆ˜μ˜ method λ§€κ°œλ³€μˆ˜λŠ” Intν˜•μ΄ λ°˜ν™˜λœλ‹€λŠ” 것을 μ»΄νŒŒμΌλŸ¬λ„ μ•Œκ³  μžˆκΈ°μ— ν΄λ‘œμ Έμ—μ„œ λ°˜ν™˜ νƒ€μž…μ„ λͺ…μ‹œν•΄μ£Όμ§€ μ•Šμ•„λ„ λœλ‹€. ν•˜μ§€λ§Œ in ν‚€μ›Œλ“œλŠ” μƒλž΅ν•  수 μ—†λ‹€. let res..

πŸ’» 개발/iOS

[iOS / Swift] 상속 VS μ΅μŠ€ν…μ…˜

μ΅μŠ€ν…μ…˜ μŠ€μœ„ν”„νŠΈμ˜ κ°•λ ₯ν•œ κΈ°λŠ₯으둜, ꡬ쑰체, 클래슀, μ—΄κ±°ν˜•, ν”„λ‘œν† μ½œ νƒ€μž…μ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  수 있게 ν•΄μ€€λ‹€. κΈ°λŠ₯을 μΆ”κ°€ν•˜λ €λŠ” νƒ€μž…μ˜ κ΅¬ν˜„λœ μ†ŒμŠ€ μ½”λ“œλ₯Ό μ•Œμ§€ λͺ»ν•˜λ”라도 νƒ€μž…λ§Œ μ•Œκ³  μžˆλ‹€λ©΄ κΈ°λŠ₯을 ν™•μž₯ν•  수 μžˆλ‹€. μ΅μŠ€ν…μ…˜μœΌλ‘œ νƒ€μž…μ— μΆ”κ°€ν•  수 μžˆλŠ” κ²ƒλ“€μ—λŠ” μ—°μ‚° νƒ€μž… ν”„λ‘œνΌν‹° / μ—°μ‚° μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹° νƒ€μž… λ©”μ„œλ“œ / μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ μ΄ˆκΈ°ν™” μ„œλΈŒμŠ€ν¬λ¦½νŠΈ 쀑첩 νƒ€μž… νŠΉμ • ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•  수 μžˆλ„λ‘ κΈ°λŠ₯ μΆ”κ°€ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  μˆ˜λŠ” μžˆμ§€λ§Œ 기쑴에 μ‘΄μž¬ν•˜λŠ” κΈ°λŠ₯을 μž¬μ •μ˜(override)λŠ” λΆˆκ°€λŠ₯ν•˜λ‹€. 이것이 λ°”λ‘œ μƒμ†κ³Όμ˜ 차이이닀. 상속 VS μ΅μŠ€ν…μ…˜ 상속 - 클래슀 νƒ€μž…μ— ν™œμš© - 수직적으둜 ν™•μž₯ - μž¬μ •μ˜ κ°€λŠ₯ μ΅μŠ€ν…μ…˜ - 클래슀, ꡬ쑰체, μ—΄κ±°ν˜•, ν”„λ‘œν† μ½œ λ“± λͺ¨λ“  νƒ€μž…μ— ν™œμš© - 수..

⛹️ 라이프/회고

[NCSOFT] 2022 μ—”μ”¨μ†Œν”„νŠΈ 썸머 인턴 ν›„κΈ° - 2λΆ€

1뢀에 μ΄μ–΄μ„œ μ“°λŠ” κΈ€! 인턴은 총 7μ£Όκ°„ 진행됐닀. λ§ˆμ§€λ§‰ μ£ΌλŠ” μ΅œμ’… λ°œν‘œμ™€ μˆ˜λ£Œμ‹ λ“±μœΌλ‘œ 일정이 λ§Žμ•˜κΈ°μ— λ§ˆμ§€λ§‰ μ£Όλ₯Ό μ œμ™Έν•˜λ©΄ 6μ£ΌλΌλŠ” 짧은 μ‹œκ°„μ΄μ—ˆλ‹€. 사싀, 인턴 μ΄ˆκΈ°μ—λŠ” 7μ£Όκ°€ μ—„μ²­ 길게 λŠκ»΄μ‘ŒλŠ”λ° 인턴 과제λ₯Ό μˆ˜ν–‰ν•˜λ‹€λ³΄λ‹ˆ 7μ£ΌλΌλŠ” μ‹œκ°„μ΄ λ„ˆλ¬΄ 짧게 λŠκ»΄μ‘Œλ‹€. 1μ£Ό - νŒ€ 적응 κΈ°κ°„ 7μ›” 4일을 μ‹œμž‘μœΌλ‘œ 인턴이 μ‹œμž‘λ˜μ—ˆλ‹€. 각 νŒ€ λ³„λ‘œ 인턴이 1 ~ 2λͺ… 정도 λ°°μ •λ˜μ—ˆκ³  νŒ€μ—μ„œλŠ” 인턴이 λ‚˜ ν•œ λͺ…μ΄μ—ˆλ‹€. νŒ€μ˜ μƒμœ„ 쑰직인 μ‹€μ—μ„œλ„ 인턴이 λ‚˜ ν•œ λͺ…μ΄μ—ˆλ‹€. λ‚˜ ν˜Όμžμ˜€μ§€λ§Œ νŒ€ λΆ„μœ„κΈ°κ°€ λ„ˆλ¬΄ μ’‹μ•„μ„œ μ μ‘ν•˜λŠ”λ° 큰 어렀움은 μ—†μ—ˆλ˜ 것 κ°™λ‹€. μ•„λ¬΄νŠΌ, 첫째 μ£Όμ—λŠ” λ‚΄κ°€ μ†ν•œ νŒ€μ΄ 무엇을 ν•˜κ³  μžˆλŠ” νŒ€μΈμ§€μ™€ 과제둜 μˆ˜ν–‰ν•  아이디어에 λŒ€ν•œ ꡬ상 및 κΈ°νšμ„ μ§„ν–‰ν–ˆλ‹€. 인턴듀끼리도 μ‘°κ°€ μ •ν•΄μ‘Œλ‹€. λ‚΄κ°€ μ†ν•œ μ‘°..

πŸ’» 개발/였늘의 μ‚½μ§ˆ

[iOS / Swift] URL Encoding = nil...? (URL 인코딩이 λ˜μ§€ μ•Šμ„ λ•Œ)

곡곡데이터 ν¬ν„Έμ—μ„œ ν•œκ΅­ν™˜κ²½κ³΅λ‹¨μ—μ„œ μ œκ³΅ν•˜λŠ” λŒ€κΈ°μ§ˆ 정보λ₯Ό ν†΅ν•΄μ„œ κ°„λ‹¨ν•˜κ²Œ μΈ‘μ •μ†Œλ³„ λŒ€κΈ°μ§ˆ 정보λ₯Ό 확인할 수 μžˆλŠ” 앱을 λ§Œλ“€μ–΄λ³΄λ €κ³  ν–ˆλ‹€. ν•œκ΅­ν™˜κ²½κ³΅λ‹¨_에어코리아_μΈ‘μ •μ†Œμ •λ³΄ λŒ€κΈ°μ§ˆ μΈ‘μ •μ†Œ 정보λ₯Ό μ‘°νšŒν•˜κΈ° μœ„ν•œ μ„œλΉ„μŠ€λ‘œ TM μ’Œν‘œκΈ°λ°˜μ˜ κ°€κΉŒμš΄ μΈ‘μ •μ†Œ 및 μΈ‘μ •μ†Œ λͺ©λ‘κ³Ό μΈ‘μ •μ†Œμ˜ 정보λ₯Ό μ‘°νšŒν•  수 μžˆλ‹€. β€» μš΄μ˜κ³„μ •μœΌλ‘œ μ‚¬μš©ν•˜κ³ μž ν•  경우 에어코리아 OpenAPI μ‚¬μš©μž www.data.go.kr κ΅¬ν˜„ν•˜λ €λŠ” 앱은 총 3개의 ViewController둜, 지역λͺ…을 검색할 수 μžˆλŠ” νŽ˜μ΄μ§€ ν•΄λ‹Ή μ§€μ—­μ˜ μΈ‘μ •μ†Œ λͺ©λ‘μ„ λ³΄μ—¬μ£ΌλŠ” νŽ˜μ΄μ§€ νŠΉμ • μΈ‘μ •μ†Œμ˜ λŒ€κΈ°μ§ˆμ˜ 상세정보λ₯Ό λ³΄μ—¬μ£ΌλŠ” νŽ˜μ΄μ§€ 둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. μš°μ„  지역λͺ…을 검색할 수 μžˆλŠ” νŽ˜μ΄μ§€μΈ ViewControllerλΆ€ν„° μ‚΄νŽ΄λ³΄μž. // // ViewControlle..

πŸ’» 개발/였늘의 μ‚½μ§ˆ

[iOS / Swift] Exception NSException * "-[UIView setText:]: unrecognized selector sent to instance

Delegate둜 νŠΉμ • Cell을 ν΄λ¦­ν–ˆμ„ λ•Œ 상세 정보 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λ„λ‘ κ΅¬ν˜„ν–ˆλ‹€. extension ViewController : UICollectionViewDelegate { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { guard let viewController = self.storyboard?.instantiateViewController(identifier: "DiaryDetailViewController") as? DiaryDetailViewController else { return } let diary = self.diaryList[indexPath.row] ..

πŸ’» 개발/iOS

[TIL] 22.08.25

κ³΅λΆ€ν•œ 것 λΆ€μŠ€νŠΈμ½”μŠ€ - iOS ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ μŠ€μœ„ν”„νŠΈ 기초 μ•Œκ²Œλœ 것 1. μ˜΅μ…”λ„ // someOptionalParm에 nil이 할당될 수 있음 func someFunction(someOptionalParam: Int?) { // .... } /// someOptionalParm에 nil이 할당될 수 μ—†μŒ func someFunction(someOptionalParam: Int) { // .... } nil이 할당될 수 μžˆλŠ”μ§€ μ—†λŠ”μ§€λ₯Ό ν‘œν˜„ nil의 κ°€λŠ₯성을 λͺ…μ‹œμ (μ½”λ“œ)으둜 ν‘œν˜„ κ°€λŠ₯ μ˜΅μ…”λ„μ΄ μ•„λ‹Œ 경우 nil 체크 없이 λ°”λ‘œ μ‚¬μš© κ°€λŠ₯ nil둜 μΈν•œ μ˜ˆμ™Έ 상황을 μ΅œμ†Œν™” 2. μ˜΅μ…”λ„ ν‘œν˜„ 방법 // μ•”μ‹œμ  μΆ”μΆœ μ˜΅μ…”λ„ var optionalValue: Int! = 10 switch optionVa..

πŸ’» 개발/iOS

[TIL] 22.08.24

κ³΅λΆ€ν•œ 것 λΆ€μŠ€νŠΈμ½”μŠ€ - iOS ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ μŠ€μœ„ν”„νŠΈ 기초 μ•Œκ²Œλœ 것 1. λ§€κ°œλ³€μˆ˜ κΈ°λ³Έ κ°’ func setUserInfo(name : String, age : Int, region : String = "Deajeon") {} ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ λ§€κ°œλ³€μˆ˜μ— 기본적으둜 전달될 값을 미리 μ €μž₯ν•  수 있음 κΈ°λ³Έ 값을 κ°–λŠ” λ§€κ°œλ³€μˆ˜λŠ” λ§€κ°œλ³€μˆ˜ λͺ©λ‘ 쀑 맨 뒀에 μœ„μΉ˜ν•˜λŠ” 것이 μ’‹μŒ 2. μ „λ‹¬μΈμž λ ˆμ΄λΈ” // λ‚΄λΆ€μ—μ„œλŠ” λ§€κ°œλ³€μˆ˜ 이름 func greeting(to friend : String, from me : String) { print("Hello, \(friend)!, my name is \(me)") } // ν˜ΈμΆœν•  λ•ŒλŠ” μ „λ‹¬μΈμž λ ˆμ΄λΈ” greeting(to : "doko", from : "kodo") ..

kodo_o
'λΆ„λ₯˜ 전체보기' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (2 Page)