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")
Unit Test (Method Test) 하나의 기능을 테스트 하는것작성한 코드가 의도한대로 동작하는지 확인하는 가장 작은 단위의 테스트 입니다. Unit Test 를 왜 하나요? 기능을 세세하게 나누어 테스트 함으로 문제되는 부분을 쉽게 파악할 수 있습니다.전체 프로그램을 빌드하는 대신 작은 단위로 빌드하기 때문에 시간절약도 할 수 있습니다.테스트를 하기위해 몇가지 원칙이 있지만, 여기서는 FIRST 원칙에대해 정리해 보겠습니다. FIRST원칙 Fast: 빠르게 - 테스트가 빠르게 실행되어야 합니다. Independent / Isolated: 독립적으로 - 서로에게 영향을 주면 안됨. Repeatable: 반복 가능하게 - 언제든 같은결과가 나와야 함. Self-Validating: 스스로..
Extension을 이용해 클래스, 구조체, 열거형 혹은 프로토콜 타입에 기능을 추가할 수 있습니다. 원본 코드를 몰라도 해당 타입에 대한 기능을 확장할 수 있습니다. 특징 계산된 인스턴스 프로퍼티와 계산된 타입 프로퍼티의 추가 인스턴스 메소드와 타입 메소드의 추가 새로운 이니셜라이저 제공 서브스크립트 정의 중첩 타입의 선언과 사용 특정 프로토콜을 따르는 타입 만들기 NOTE Extension은 타입에 새 기능을 추가할 수 있지만 재정의 (Override) 는 할 수 없습니다. Extension 문법 (Extension Syntax) extension 키워드를 사용해 선언합니다. extension SomeType { // new functionality to add to SomeType goes here..
열거형 (Enum)은 특정 구조체나 클래스의 기능을 처리하기 위해 자주 사용됩니다. 특정 문맥에서 좀 더 복잡한 타입을 위해 사용할 수 있는 유틸리티 클래스나 구조체를 정의할 수 있는데, 이를 위해 Swift에서는 중첩 타입을 지원합니다. 핵심 열거형, 클래스, 구조체를 해당 타입 안에서 다시 정의할 수 있습니다. 중첩 타입의 사용 (Nested Types in Action) 아래는 블랙잭 게임에서 사용되는 카드를 BlackjackCard 구조체를 정의한 예시 입니다. BlackjackCard 구조체는 Suit와 Rank 라는 두개의 중첩 열거 타입을 포함합니다. 블랙잭에서 Ace 카드는 1 또는 11 입니다. 이 기능은 Rank 열거형 중첩타입인 Values라는 구조체로 표시됩니다. // 구조체 Bla..
- Total
- Today
- Yesterday
- iOS error
- Swift
- swift protocol
- Swift RIBs
- Swift ModernRIBs
- swift property
- Class
- RTCCameraVideoCapturer
- swift programmers
- Swift 프로그래머스
- ios
- Swift 알고리즘
- Swift final
- swift (programmers)
- 2023년 회고
- Swift Leetcode
- Swift 프로퍼티
- RIBs tutorial
- removeLast()
- Swift init
- swift 고차함수
- Swift Error Handling
- 원티드 프리온보딩
- Swift inout
- CS 네트워크
- swift reduce
- Swift 내림차순
- Swift joined()
- Swift joined
- Combine: Asynchronous Programming with Swift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |