🍎 Apple/Swift

λ“€μ–΄κ°€κΈ° 전에듀어가기 μ•žμ„œμ„œ λ¨Όμ € λ©”μ„œλ“œμ™€ ν•¨μˆ˜μ˜ 차이λ₯Ό μ•Œκ³  κ³„μ‹ κ°€μš”?ν•¨μˆ˜μ™€ λ©”μ„œλ“œλŠ” λΉ„μŠ·ν•΄λ³΄μ΄μ§€λ§Œ 차이가 μžˆλ‹΅λ‹ˆλ‹€. λ©”μ„œλ“œλŠ” νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜μ™€ λΉ„μŠ·ν•˜μ§€λ§Œ, 객체 λ‚΄λΆ€μ˜ 데이터에 μ ‘κ·Όν•  수 μžˆλ‹€λŠ” μ μ—μ„œ 차이가 μžˆμŠ΅λ‹ˆλ‹€. ν•¨μˆ˜λŠ” λ…λ¦½μ μœΌλ‘œ μ‘΄μž¬ν•˜λ©°, νŠΉμ • νƒ€μž…μ— μ†ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.λ°˜λ©΄μ— λ©”μ„œλ“œλŠ” 클래슀, ꡬ쑰체, μ—΄κ±°ν˜• λ“±μ˜ νŠΉμ • νƒ€μž…μ— 속해 있으며, ν•΄λ‹Ή νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€μ— μ—°κ²°λ˜μ–΄ μ‚¬μš©λ©λ‹ˆλ‹€. λ‘˜μ˜ 차이λ₯Ό μ΄ν•΄ν–ˆλ‹€λ©΄, 이제 λ©”μ„œλ“œμ— λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€.  Swift의 λ©”μ„œλ“œSwiftλŠ” λ‹€μŒκ³Ό 같은 λ„€ 가지 μ£Όμš” λ©”μ„œλ“œ μœ ν˜•μ„ μ œκ³΅ν•©λ‹ˆλ‹€: μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ, νƒ€μž… λ©”μ„œλ“œ(클래슀 λ©”μ„œλ“œ, μ •μ  λ©”μ„œλ“œ)μž…λ‹ˆλ‹€. 각각의 νŠΉμ„±κ³Ό μ‚¬μš© μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.  1. μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ (Instance Meth..
μ½”λ”©ν…ŒμŠ€νŠΈμ—μ„œ ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λŠ” λ‹€ λ§žμ•˜λŠ”λ° νžˆλ“  μΌ€μ΄μŠ€μ—μ„œ λ‹€ λŸ°νƒ€μž„ μ—λŸ¬λ₯Ό 내버린 κ²½ν—˜!!!!!이 μžˆλ‹€.. ν…ŒμΌ€λ₯Ό μ‘°κΈˆμ΄λΌλ„ λ§žν˜”μœΌλ‹ˆκΉŒ,, 일단 λ‹€μŒλ¬Έμ œλ‘œ λ„˜μ–΄κ°”λ‹€κ°€ λ‹€μ‹œ ν•΄λ‹Ή 문제λ₯Ό κ³ λ―Όν–ˆλŠ”λ°,10뢄도 채 남지 μ•Šμ€ μƒνƒœμ—¬μ„œ μ•Œκ³ λ¦¬μ¦˜μ— λ¬Έμ œκ°€ μžˆλ‚˜λ§Œ μƒκ°ν•˜λ‹€κ°€ μ‹œν—˜μ΄ μ’…λ£Œλ˜μ—ˆλ‹€. ν…ŒμŠ€νŠΈκ°€ λλ‚œ ν›„ μ”»μœΌλ©΄μ„œ 생각을 ν–ˆλŠ”λ°, μžλ£Œν˜•μ„ κ³ λ €ν•˜μ§€ λͺ»ν•΄μ„œ μ—λŸ¬λ‚œ 것 κ°™λ‹€!!!λΌλŠ” 생각을 κ·Έμ œμ„œμ•Ό ν–ˆλ‹€.ν•΄λ‹Ή λ²”μœ„κ°€ -10^9 ~ 10^9 μ΄μ—ˆλŠ”λ°,, μ‚°μˆ ν•  λ•Œ λ²”μœ„λ₯Ό κ³ λ €ν–ˆμ–΄μ•Ό μ•ˆμ „ν–ˆμ—ˆκ² λ‹€λž€ 생각... Int μžλ£Œν˜•μ— λŒ€ν•΄ 머리에 넣어놔야 또 μ‹€μˆ˜λ₯Ό μ•ˆν•  것 κ°™μ•„μ„œ 정리해보렀고 ν•œλ‹€ ! πŸ˜₯    λ‹€λ“€ μ•„μ‹œκ² μ§€λ§Œ !Int 뒀에 뢙은 μˆ«μžλŠ” λΉ„νŠΈλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.μŠ€μœ„ν”„νŠΈμ—μ„œμ˜ IntλŠ” Int8, Int16, Int32..
⚠️ μ—λŸ¬ Response could not be decoded because of error: The data couldn’t be read because it is missing. Alamofire ν†΅μ‹ ν•˜μ—¬ λ‘œκ·ΈμΈμ„ ν•˜λŠ” 도쀑에 μ•ˆλœ¨λ˜ μ—λŸ¬κ°€ 뜨기 μ‹œμž‘ν–ˆλ‹€,, μ—°κ²°ν•  APIκ°€ λ„ˆλ¬΄ λ§Žμ•„μ„œ ν•˜λ‚˜μ”© μ—°κ²°λΆ€ν„° μš°μ„  ν•˜λŠλΌ μ—λŸ¬μ²˜λ¦¬λ₯Ό λ‹€ 해두지 μ•Šμ•˜μ—ˆλŠ”λ°,, μ˜€λžœλ§Œμ— ν”„λ‘œμ νŠΈ κ°œλ°œν•˜λ € ν–ˆλŠ”λ°, μ—λŸ¬κ°€ λ–΄λ‹€!!!!.. λ‚˜λŠ” κ·ΈλŸ¬μ§€ λͺ»ν–ˆμ§€λ§Œ,, μ˜€νƒ€, μ˜΅μ…”λ„ 확인 5λ²ˆμ”© μ²΄ν¬ν•΄λ³΄μž! "k"κ°€ λŒ€λ¬Έμž, μ†Œλ¬Έμžκ°€ λΉ„μŠ·ν•˜κ²Œ μƒκ²¨μ„œ 주둜 범인이닀 πŸ’¨ 정닡을 μ°Ύμ•„κ°€κΈ°κΉŒμ§€μ˜ 과정은 μ΄λž¬λ‹€. 1. 디코딩을 λͺ»ν•œλ‹€λŠ” μ—λŸ¬λ‹ˆκΉŒ κ·Έ 사이에 μ•ŒνŒŒλ²³ μ˜€νƒ€κ°€ μžˆμ–΄ API μˆ˜μ •μ„ ν•˜μ‹ κ±΄μ§€ μŠ€μ›¨κ±°λ₯Ό 확인해봀닀 > 아무리 비ꡐ해도 μ² μžλŠ”..
ν•  일이 μ‚°λ”λ―Έμ˜€λ˜...μ–΄λŠ λ‚ .. μŠ€ν”„λ¦°νŠΈ 회고λ₯Ό ν•˜λŠ” λ‚ μ΄μ—ˆλ‹€.. νŒ€μ›μ΄ λ§ν–ˆλ‹€,,"전체 질문(Data)을 νŒŒμ΄μ–΄μŠ€ν† μ–΄μ— μ—…λ°μ΄νŠΈν•˜λŠ”λ°, Document Idκ°€ λžœλ€κ°’μœΌλ‘œ λ“€μ–΄κ°€κ²Œ λμ–΄μš”." κΈ°μ‘΄μ—λŠ” λ¬Έμ„œ 아이디가 λ„νλ¨ΌνŠΈ λ‚΄λΆ€μ˜ κ°’(μ •μˆ˜)둜 λ˜μ–΄μžˆμ–΄μ„œ 이λ₯Ό 뢈러온 λ’€ Id둜 정렬을 ν•΄μ„œ 화면에 보여주고, 데이터λ₯Ό λΆˆλŸ¬μ™€ 화면을 κ·Έλ¦¬λŠ” 둜직이 μžˆμ—ˆλ‹€. λ‚˜λŠ” μƒκ°ν–ˆλ‹€,,, "μ—₯ λΆ„λͺ… 앱에 λ™μž‘μ•ˆν•˜λŠ” 뢀뢄이 μžˆμ„ν…λ°,," ν•˜κ³  λ°”λ‘œ 앱을 μΌœμ„œ ν™•μΈν•΄λ³΄λ‹ˆ "μΆ”μ²œμ§ˆλ¬Έ"κΈ°λŠ₯이 λ™μž‘ν•˜μ§€ μ•Šκ³ , 빈 ν™”λ©΄μœΌλ‘œ λ‚΄λΉ„κ²Œμ΄μ…˜λ˜λŠ” 이쓔,,λ₯Ό ν™•μΈν–ˆλ‹€. 회고, νšŒμ˜κ°€ λͺ¨λ‘ λλ‚˜κΈ° μ „, μœ μ €κ°€ ν˜„μž¬ μ‚¬μš©ν•˜κ³  μžˆλŠ” μƒν™©μ΄λ‹ˆ λ‘œμ§μ„ μˆ˜μ •ν•΄ λΉ λ₯΄κ²Œ 릴리즈 ν•˜κ±°λ‚˜, νŒŒμ΄μ–΄μŠ€ν† μ–΄ λ””λΉ„λ₯Ό μˆ˜μ •ν•΄μ„œ λΉ λ₯΄κ²Œ ν•΄κ²°ν•΄μ•Ό ν•  것 κ°™λ‹€κ³  μ–˜κΈ°ν–ˆλ‹€..
μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈμ—μ„œ λ―ΉμŠ€νŒ¨λ„ 토큰이 λ“€μ–΄κ°€μžˆλŠ”λ°, κ°œλ°œμš©μ΄λž‘ 배포용 토큰이 달라야ν•˜μ§€ μ•Šλ‚˜λΌλŠ” 생각이 λ“€μ—ˆλ‹€. "그럼 λ””λ²„κ·Έλž‘ 릴리즈λ₯Ό λ‹€λ₯΄κ²Œ μ²˜λ¦¬ν•΄μ£Όλ©΄ λ˜κ² λ„€" ν•˜λŠ” μƒκ°μœΌλ‘œ SwiftCompiler의 μ •ν™•ν•œ μ‚¬μš©λ°©λ²•μ„ λ“œλ””μ–΄ μ°Ύμ•„λ³΄κ²Œ λ˜μ—ˆλ‹€. μŠ€ν‚€λ§ˆλ₯Ό λ‹€λ₯΄κ²Œ μ μš©ν•˜λŠ” 방법도 μ•„μ£Ό κ°„λ‹¨νžˆ μ•Œμ•„λ³΄μ•˜λ‹€-! ✨ μ½”λ“œμ—μ„œ DEBUG, RELEASE λΆ„κΈ° μ²˜λ¦¬ν•˜κΈ° ✨ 방법 1. RELEASE ν”Œλž˜κ·Έ μ„€μ •ν•˜κΈ° 1) ν”„λ‘œμ νŠΈ 파일 > TARGETS-ν”„λ‘œμ νŠΈλͺ… > Build Settings > All, Combined μ„€μ • 2) ν•˜λ‹¨μœΌλ‘œ μ­‰ 내렀보면 Swift Compiler - CustomFlags에 μ΄ˆκΈ°μ—λŠ” Debug 만 μ„€μ •λ˜μ–΄ μžˆμ„ 텐데, ν•˜λ‹¨ Release에 "RELEASE"λ₯Ό μΆ”κ°€ν•΄μ£Όλ©΄ λœλ‹€! 3) μ½”..
mutatingμ΄λž€?! κ°’ νƒ€μž…(ꡬ쑰체와 μ—΄κ±°ν˜•)의 μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œ μžμ‹  λ‚΄λΆ€μ˜ 값을 λ³€κ²½ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν‚€μ›Œλ“œ. ꡬ쑰체 λ©”μ†Œλ“œμ—μ„œ ꡬ쑰체 ν”„λ‘œνΌν‹°λ₯Ό μˆ˜μ •ν• λ•ŒλŠ” mutating ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ ν•΄λ‹Ή λ©”μ†Œλ“œκ°€ 호좜 λ˜μ—ˆμ„λ•Œ ν”„λ‘œνΌν‹°κ°€ λ³€κ²½ 될 수 μžˆμŒμ„ λͺ…μ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. struct Person { var name = "홍길동" mutating func changeName(name: String) { self.name = name } } var person = Person() var person2 = person // μ°Έμ‘° var person3 = person // μ°Έμ‘° p2.x = 3 //COW μ‹€μ œ 볡사가 일어남 더 μ•Œμ•„λ³ΌκΉŒμš”?! 보톡 κ°’ νƒ€μž…μ˜ ν”„λ‘œνΌν‹°λŠ” μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œ μˆ˜μ •ν•  수 μ—†μŠ΅..
Swiftμ—μ„œλŠ” μ˜μ‘΄μ„± μ£Όμž…(Dependency Injection)을 μœ„ν•΄ λ‹€μ–‘ν•œ 방법을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έ 쀑 λŒ€ν‘œμ μΈ 방법 쀑 ν•˜λ‚˜μΈ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•œ μ˜μ‘΄μ„± μ£Όμž…μ— λŒ€ν•΄ μ˜ˆμ‹œμ™€ ν•¨κ»˜ μ•Œμ•„λ΄…μ‹œλ‹€. 계산기λ₯Ό λ§Œλ“œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€. 숫자λ₯Ό μž…λ ₯λ°›κ³ , 사칙연산을 μˆ˜ν–‰ν•˜λŠ” κΈ°λŠ₯이 ν•„μš”ν•˜κ² μ£ ? μ΄λ•Œ, 숫자λ₯Ό μž…λ ₯λ°›λŠ” κΈ°λŠ₯κ³Ό 사칙연산을 μˆ˜ν–‰ν•˜λŠ” κΈ°λŠ₯을 각각 λ³„λ„μ˜ 클래슀둜 λΆ„λ¦¬ν•˜κ³ , 이 ν΄λž˜μŠ€λ“€μ΄ μ„œλ‘œ μ˜μ‘΄ν•˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” 것이 μ’‹λ‹€κ³  ν•©λ‹ˆλ‹€. μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ΄ ν–₯μƒλ˜κ³ , ν…ŒμŠ€νŠΈλ„ λ”μš± μ‰¬μ›Œμ§€κΈ° λ•Œλ¬Έμ΄μ£ ! 이λ₯Ό μœ„ν•΄, μš°λ¦¬λŠ” λ‹€μŒκ³Ό 같은 ν”„λ‘œν† μ½œμ„ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. protocol NumberInput { func getNumber() -> Int } protocol ..
Result νƒ€μž…μ΄λž€ enum Result { case success(Success) case failure(Failure) } Generic Enumeration으둜 μ„ μ–Έλ˜μ–΄ success λ˜λŠ” failure 두가지 caseλ₯Ό ν¬ν•¨ν•˜λŠ” νƒ€μž…μž…λ‹ˆλ‹€. Result νƒ€μž…μ€ 성곡과 μ‹€νŒ¨μ— λŒ€ν•œ λ°˜ν™˜κ°’μ„ μ‚¬μš©ν•˜κ³  싢은 κ²½μš°μ— μ‚¬μš©ν•©λ‹ˆλ‹€. ( = successμ—λŠ” μž‘μ—…μ˜ κ²°κ³Όκ°€ μ €μž₯되고, failureμ—λŠ” μ—λŸ¬κ°€ μ €μž₯λ©λ‹ˆλ‹€.) FailureλŠ” Errorλ₯Ό 상속받은 νƒ€μž…μ΄μ–΄μ•Όλ§Œ ν•©λ‹ˆλ‹€. Swift5μ—μ„œλΆ€ν„° Standard library에 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μž₯점 가독성 증가: 결과의 성곡, μ‹€νŒ¨ μ—¬λΆ€μ™€λŠ” 상관없이 ν•˜λ‚˜λ‘œ κ²°κ³Όλ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ½”λ“œ 길이 단좕: optional νƒ€μž…μ„ μ‚¬μš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, unw..
JINiOS
'🍎 Apple/Swift' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘