HarryPotterBooks 과제 1레벨 기록
·
iOS/Swift
1. 구현해야 할 것2. 문제 해결import Foundationimport UIKitstruct BookResponse: Decodable { let data: [Book]}struct Book: Decodable { let attributes: Attributes}struct Attributes: Decodable { let title: String let author: String let pages: Int let release_date: String let dedication: String let summary: String let wiki: String let chapters: [Title]}struct Title: Decodable { ..
[TIL / 25.03.24] UIKit No Storyboard 초기 세팅
·
iOS/Swift
스토리보드 없이 코드 베이스로 UI를 구현하게 된다면 어떻게 세팅할지 알아보자 ! 1. main.storyboard 삭제move to trash 해줘야함 ! 2. 프로젝트 설정 - Build Settings - main 검색하면 나오는 UIKit Main storyboard File Base Name 백스페이스로 제거 3. 파일 중 Info.plist에서 해당 항목도 백스페이스로 제거 4. SceneDelegate 내에 코드 수정func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (..
[TIL / 25.03.20] 최적화(OptimizationTips) 2
·
iOS/Swift
1. Swift 컨테이너 타입을 효율적으로 사용하는 방법Array에서 값 타입 사용하기Swift에서 타입은 두 가지 카테고리로 나눌 수 있습니다. 값 타입과 참조 타입.값 타입은 struct, enum, tuple이 있고, 참조 타입은 class가 있는데, 값 타입의 경우 NSArray 내부에 포함될 수 없습니다.여기서 NSArray가 무엇인가? NSArray는 Objective-C에서 사용되는 불변(Immutable) 배열 클래스라고 합니다. 스위프트에선 옵젝씨와의 브릿징을 통해 사용할 수 있다고 합니다. 오직 객체(참조 타입)만 저장 가능합니다. Swift의 Array는 내부적으로 때로는 Objective-C의 NSArray와 호환되어야 한다고 합니다. 다만, 값 타입은 NSArray에 넣을 수 없는..
[Algorithm / 25.03.20] 카드 뭉치
·
Algorithm
1. 문제 설명코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다.원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다.한 번 사용한 카드는 다시 사용할 수 없습니다.카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다.기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다.예를 들어 첫 번째 카드 뭉치에 순서대로 ["i", "drink", "water"], 두 번째 카드 뭉치에 순서대로 ["want", "to"]가 적혀있을 때 ["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들려고 한다면 첫 번째 카드 뭉치에서 "i"를 사용한 후 ..
[TIL / 25.03.19] playground, command line tool에서의 비동기 함수 (feat. escaping closure)
·
iOS/Swift
1. 오늘 무엇을 했으며 문제가 무엇인가,,,,,,오전부터 낮까지 알고리즘 문제 하나 붙잡고 있었다가 남는 시간에 무언가 몰두해서 하기 힘들어서 밀린 강의를 좀 들어두도록 했다.문제가 생긴 부분은 심화 단계에서의 클로저 실습. escaping closure(탈출 클로저)에 대한 실습인데 실행에 자꾸 문제가 있었다. 우선 탈출 클로저란 무엇인가?"탈출 클로저(@escaping)는 함수가 반환된 후에도 실행될 수 있는 클로저입니다. 즉, 클로저가 함수의 실행 범위(scope)를 '탈출'하여 함수 외부에서도 호출될 수 있습니다. 반면, 일반 클로저(비탈출 클로저)는 함수 내부에서만 실행되며 함수가 반환되기 전에 실행을 완료해야 합니다." 원래 클로저를 쓸 때 선언 시 함수 블럭 내에 쓰는데 만약 이 클로저가 ..
[TIL / 25.03.18] 최적화(OptimizationTips) 1
·
iOS/Swift
Private, public 의 쓰임새에 대해서 좀 더 고민하다가 같이 고민하던 분들과 같이 튜터님께 갔는데 최적화 관련 정보가 있는 링크를 받아 해석해보기로 했읍니다,,,,,  1. Whole Module Optimizations (WMO)기본적으로 Swift는 각 파일을 개별적으로 컴파일한다고 합니다. 이를 통해 Xcode는 여러 파일을 매우 빠르게 병렬로 컴파일할 수 있는데, 단 각 파일을 개별적으로 컴파일하게 되면 특정 컴파일러 최적화를 방지할 수 있다고 합니다. (일부 최적화를 하는 데에 방해가 된다는 느낌인듯?) 이때 파일 단위로 컴파일하지 않고 모든 파일을 하나의 단위로 컴파일하는게 WMO라고 합니다.단, 컴파일 시간이 기본모드보다 느린 점이 있지만 그만큼 최적화에 장점이 있는데 이 최적화도..
[Algorithm / 25.03.18] 추억 점수
·
Algorithm
1. 문제 설명사진들을 보며 추억에 젖어 있던 루는 사진별로 추억 점수를 매길려고 합니다. 사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다. 예를 들어 사진 속 인물의 이름이 ["may", "kein", "kain"]이고 각 인물의 그리움 점수가 [5점, 10점, 1점]일 때 해당 사진의 추억 점수는 16(5 + 10 + 1)점이 됩니다. 다른 사진 속 인물의 이름이 ["kali", "mari", "don", "tony"]이고 ["kali", "mari", "don"]의 그리움 점수가 각각 [11점, 1점, 55점]]이고, "tony"는 그리움 점수가 없을 때, 이 사진의 추억 점수는 3명의 그리움 점수를 합한 67(11 + 1 + 55)점입니다. 그리워하는 사람..
[TIL / 25.03.17] Array.compactMap (feat. 문법 심화 과제)
·
iOS/Swift
문제에서 요구사항이 "함수 c 에 Numbers 프로토콜 요소를 가진 배열만 사용할 수 있는 함수 d 를 작성해주세요."였다. 엥? 배열 내 요소에 프로토콜 준수를 시킨다는건 대충 알겠지만 뭐 어떤 내용에 대한 준수를 하도록 할 것이며... 등등 의문이 좀 있었는데 어쨋든 구현을 해보기로 한다. import Foundationprotocol Numbers { var intValue: Int? { get }}class ThirdQuestion { func removeEvenNum(_ array: [Int]) -> [Int] { var result: [Int] = [] for i in 1...array.count { // 홀수 요소..
[TIL / 25.03.13] 의존성 주입 (Dependency Injection)
·
iOS/Swift
1. 의존성 주입, 왜 할까?개발을 하다 보면 코드 간의 의존성 문제로 인해 유지보수가 어려워지는 경우가 많습니다.객체간에 강하게 참조를 할 경우나,, 어느 객체에서 한 객체를 직접 내부에서 인스턴스화해 쓰는 경우 쓰이던 객체가 만약 문제가 생긴다면?그 문제는 그 객체만 해결해줄 게 아니라 그걸 직접 만들어 쓰고 있던 객체 측에서도 수정해줘야 합니다..!!이렇게 한 객체가 타 객체에게 의존을 하게 되어 생기는 문제를 해결할 수 있도록 의존성 주입을 해줍니다 2. 의존성 주입은 어떻게 하나? 그리고 장점은?class Guitar { func play() { print("대..충.. 기타치는 소리...") }}class Artist { var guitar = Guitar() ..
[TIL / 25.03.12] Alamofire Interceptor에 관한 문제 해결
·
iOS/Swift
1. 겪었던 문제메서드마다 interceptor 인스턴스를 넣어주면서 토큰 관련 인증을 알아서 하도록 설정을 해두었는데, 이상하게 토큰 관련 에러가 지속됐다. (토큰이 만료되었습니다.........)Task { do { let response = try await AF.request(AuthRouter.refreshToken(refreshRequest)) .serializingDecodable(AuthTokenResponse.self) .value // 새로운 토큰 저장 KeychainHelper.shared...