오늘은 fatal Error에 대해 공부해보려고 합니다. 예를들어 정해진 index보다 초과해서 접근하려는 경우 fatal error가 발생하기도 하고 이외에도 여러가지가 있는데요. 바로 공식문서 부터 보겠습니다. Fatal Error 무조건 실행을 중지하고 메시지를 출력합니다. 정의 func fatalError( _ message: @autoclosure () -> String = String(), file: StaticString = #file, line: UInt = #line ) -> Never (으.. Never는 또 뭐야..) Never는 값이 없는 타입을 말한다네요. (정상적으로 리턴하지 않는 함수의 리턴 타입) 즉, fataError는 메소드에서 리턴할 것이 없을때, 생각지 못한 에러가 ..
기본연산자 외에 Swift에서는 더 복잡한 값을 조작할 수 있는 고급연산자를 제공합니다. 비트 연산자 (Bitwise Operators) 비트연산자를 사용하면 데이터 구조 내에서 개별 원시 데이터 비트를 조작할 수 있습니다. 그래픽 프로그래밍, 디바이스 드라이버 생성과 같은 Low-level 프로그래밍에 자주 사용됩니다. Swift는 C에서의 모든 비트연산자를 지원합니다. 비트 NOT 연산자 (Bitwise NOT operator) ( ~ ) 키워드를 사용하여, 비트 값(2진수)을 반대로 바꿔줍니다. 예시 let initialBits: UInt8 = 0b00001111 // 15 let invertedBits = ~initialBits // 240 // 1110000 (2진수) -> 240 (10진수) ..
다른소스 파일 및 모듈의 코드에서, 코드의 일부에 대한 접근을 제한 하는걸 말합니다. 객체지향에서 중요한 개념인 *은닉화를 구현하기 위해 쓰입니다. 은닉화 객체 외부에서 객체 내부의 접근을 제한해 , 데이터 수정을 방지 모듈과 소스파일 (Modules and Source Files) 모듈 코드를 배포하는 단일 단위 하나의 프레임워크 즉, import 해오는것 예를들어 import Foundation import Alamofire 이런게 모듈입니다. 소스파일 모듈안에 있는 소스파일을 의미합니다. 각 소스파일에 여러 특정 타입을 선언해 사용할 수 있습니다. 접근레벨 (Access Levels) 5개의 접근레벨을 제공하며 아래와 같습니다. open & public 다른 모듈에서도 사용이 가능합니다. 둘의 차이..
오늘은 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..
- Total
- Today
- Yesterday
- Class
- iOS error
- Combine: Asynchronous Programming with Swift
- Swift joined()
- removeLast()
- Swift Error Handling
- swift programmers
- Swift joined
- swift property
- Swift 내림차순
- Swift 프로그래머스
- Swift final
- swift reduce
- Swift 알고리즘
- Swift 프로퍼티
- RTCCameraVideoCapturer
- swift (programmers)
- 원티드 프리온보딩
- CS 네트워크
- Swift
- Swift init
- Swift inout
- swift protocol
- swift 고차함수
- 2023년 회고
- Swift ModernRIBs
- ios
- Swift RIBs
- Swift Leetcode
- RIBs tutorial
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |