오늘은 Scroll Indicator를 최상단으로 이동하는 걸 블로깅 해보려고 합니다. 예를들어 앱 내에서 상품을 검색 할때 이런 상황이 있겠죠. 상품검색 > 아래로 쭉 내리면서 상품을 보다가 > 새로운 상품검색 이럴때 새 상품을 검색했기 때문에 사용자가 보는화면이 다시 최상단으로 올라가야하겠죠? 생각보다 간단합니다 ! CollectionView에서는 아래의 인스턴스 메서드를 사용하면 돼요. TableView 에서는 scrollToRow(at:at:animated:) 를 사용하시면 됩니다. 동작 방식은 똑같습니다! 첫번째 파라미터 (indexPath): 해당 item 또는 section 위치 지정 두번째 파라미터 (scrollPosition): scroll의 위치 지정 세번째 파라미터 (animated)..
오늘은 안전하게 배열을 조회하는 방법에 대해 알아 보려고 합니다. 아래와 같이 배열을 조회하다 엉뚱한 index에 접근하게 되면, 이런 에러를 많이 보실겁니다. let arr = [1, 2, 3] for index in 0...10 { print(arr[index]) // Fatal error: Index out of range } Fatal error: Index out of range Array(배열)의 경우에는 index를 접근해서 가져오는 값이 Optional이 아니라 guard를 쓸 수도 없어 index가 유효하지 않을 경우 꼼짝없이 앱이 다운되어 버립니다. 이런 오류를 방지하기 위해 extension을 이용해 아래와 같은 코드를 적용해줍니다. extension Array { subscript ..
오늘은 고차함수 compactMap과 flatMap에 대해 공부해 보려고 합니다. 먼저 예시로 바로 들어볼게요. 아래와 같은 배열이 있습니다. let arr = [nil, 1, 2, nil, nil, 5] 여기서 nil을 없애고 배열을 반환하고 싶으면 ? 이때 compactMap, flatMap 을 사용하면 돼요! let arr = [nil, 1, 2, nil, nil, 5] let compactMap1 = arr.compactMap { $0 } let flatMap1 = arr.flatMap { $0 } print("compact:\(compactMap1)") // compact:[1, 2, 5] print("flatMap:\(flatMap1)") // flatMap:[1, 2, 5] 이렇게 맛보기만 ..
Swift는 코드가 불안전한 동작 발생을 방지합니다. 예를들어, 변수가 사용되기 전에 초기화 된다 거나, 할당이 해제 된 후 메모리에 접근하지 않도록 하거나, 배열 인덱스의 범위를 넘는 등이 있습니다. 이렇듯 Swift에서 메모리 관련해 자동으로 관리해 주기때문에 대부분의 경우에는 Swift언어를 사용하는 사용자는 메모리의 접근에 대해 전혀 생각하지 않고 사용해도 됩니다. 하지만 메모리 접근 충돌이 발생할 수 있는 상황을 이해하고 메모리 접근 충돌을 피하는 코드를 어떻게 작성할 수 있는지 이해하는 것은 중요합니다. 메모리 접근 충돌이 일어나면 런타임 에러, 컴파일 에러가 발생 합니다. 메모리 접근 충돌의 이해 (Understanding Conflicting Access to Memory) 아래 예시를 ..
오늘은 개인 프로젝트에 MVVM을 적용해보면서 dataBinding을 할때 Observable이라는 class의 동작 방식을 공부해 보려고 합니다. 가즈아! 아래는 MVVM을 사용하고 데이터 바인딩을 해보셨다면 한번쯤 보셨을 코드입니다. 이런형태가 있구나 하면서 슥 보세요 설명은 아래서 ! class Observable { // 3 var listener: ((T) -> Void)? // 2 var value: T { didSet { self.listener?(value) } } // 1 init(_ value: T) { self.value = value } // 4 func bind(listener: @escaping (T) -> Void) { listener(value) self.listener =..
확장으로 프로토콜 준수 추가 (Adding Protocol Conformance with an Extension) 프로토콜에 extension을 하게되면 기존 타입을 확장할 수 있습니다. 예제를 보면서 이해하는게 더 빠를것 같습니다. 바로가시죠 Extension으로 기본값 지정하기 // 1 protocol Walkable { } // 2 protocol Portable { func port() } // 3 extension Walkable { func walk() { print("걷습니다") } } // 4 struct Human: Walkable, Portable { func port() { print("듭니다") } } var human = Human() human.walk() // 걷습니다 huma..
타입으로서의 프로토콜 (Protocols as Types) 프로토콜은 기능구현을 하지 않습니다. (선언만 할 뿐) 프로토콜을 타입으로 사용할 수 있습니다. 다른 타입이 허용되는 여러 곳에서 다음과 같은 프로토콜을 사용할 수 있습니다. 함수, 메서드 또는 이니셜라이저에서의 매개변수 타입 또는 리턴타입 상수, 변수 또는 프로퍼티로서의 타입 배열, 사전, 다른 컨테이너의 항목으로서의 타입 타입이기 때문에 네이밍은 첫번째 문자를 대문자로 해줍니다. ex) TestType 예제로 바로 봐봅시다 protocol RandomNumberGenerator { func random() -> Double } class LinearCongruentialGenerator: RandomNumberGenerator { var la..
문제 Build input file cannot be found: 폴더경로/~~~/~~~/~~~/info.plist 오류메시지가 나오면서 Build가 되지 않음. 원인 Xcode 내에서 info.plist를 다른 폴더로 옮겼더니 경로를 찾지 못함 경로 바꾸기전 상태 경로 바꾼 후 상태 프로젝트 폴더/ info.plist 프로젝트 폴더/ Resource/ info.plist 해결 TARGETS → Build Settings → Packaging → 경로 재설정 Besteats/info.plist → Besteats/Resource/info.plist (바뀐경로로 재설정)
오늘은 Responder Chain, FirstResponder에 대해 정리해 보려고 합니다. :) 사용자가 앱에 터치를 하게 될때 앱이 어떻게 알고 반응하게 되는지 파악하는데 도움이 될거 같아요 !! 바로 스터디 해보겠습니다 . Responder Responder는 이벤트를 처리하고 반응할 수 있는 객체 입니다. 모든 Responder 객체는 UIResponder에서 상속된 클래스의 인스턴스 입니다. Responder Chain 이벤트를 처리할수 있는 Responder를 쭉 찾아내는 것 -> 쭉 찾았을때도 없을시 해당 이벤트를 버림 예 ) UILabel을 터치했다고 가정 해봅시다. Responder Chain은 아래와 같이 동작합니다. 1. 사용자: UILabel 터치 (사용자 -> UILabel) 2..
~= 연산자 어떤 범위에 포함 되는지 검사할 때 아래와 같이 사용합니다. let num = 3 if 1...10 ~= num { print("포함됨") } // 포함됨 num이 3이므로 1부터 10까지 숫자에 포함 됨으로 "포함됨"을 출력하게 됩니다. 네트워크 통신에서 statusCode가 성공 일때 걸러낼 수도 있습니다. if 200.. Bool { if "a"..."z" ~= str { print("소문자 포함") return true } else { print("소문자가 없습니다.") return false } } findLowerCase(str: "esSS") findLowerCase(str: "ABCD")
- Total
- Today
- Yesterday
- Combine: Asynchronous Programming with Swift
- Swift joined()
- swift 고차함수
- Swift RIBs
- Swift 프로그래머스
- Uber Architecture
- 2023년 회고
- Swift joined
- swift property
- Swift init
- RIBs tutorial
- iOS GCD
- Swift final
- Swift
- swift reduce
- 호텔리어 개발자
- Swift while
- Swift 내림차순
- ios
- Swift Leetcode
- Swift inout
- swift protocol
- 원티드 프리온보딩
- Swift Error Handling
- Swift 프로퍼티
- Class
- Swift ModernRIBs
- swift function
- CS 네트워크
- iOS error
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |