목록분류 전체보기 (388)
나의 발자취

사전배경 (내 스펙: MacBook Pro Chip Apple M1 Max) 코드에 firebase를 이용하기 위해 pod install을 해야한다.gem which cocoapods로 버전 확인 후 아무것도 없다면 homebrew를 먼저 깔아주어야한다. 그 후 sudo gem install cocoapods 라고 터미널에 입력->프로젝트가 있는 폴더로 cd해서 pod init -> pod install 하지만 여기서! 예상과 달리 아래와 버그가 생기는걸 본다면 혹은 이런 버그... 멘붕이 올것이다. 원인 정확한 원인은 모르겠으나 아래와 같이 ffi_c와 같은 파일이 없어서 생긴 에러이다. 하나 뿐만이 아니라 ffi_c와 관련된 여러 파일들을 읽을 수 없어서 생긴 문제인데 자세히 읽어보면 incompat..
초기화(initialization) 와 생성자(initializer) /**===================================================================== - 초기화는 클래스, 구조체, 열거형의 인스턴스를 생성하는 과정임 - 각 "저장 속성"에 대한 초기값을 설정하여 인스턴스를 사용가능한 상태로 만드는 것 (열거형은 저장속성이 존재하지 않으므로, case중에 한가지를 선택 및 생성) - 결국, 이니셜라이저의 실행이 완료되었을 때, - 인스턴스의 모든 저장속성이 초기값을 가지는 것이 ==> 생성자(Initializer)의 역할 - 참고) 소멸자 - 생성자와 반대개념의 소멸자(Deinitializer)도 있음 - 소멸자 ==> 인스턴스가 해제되기 전에 해야할 기능..
재정의(Overriding) Overloading vs Overriding /**============================================================================== - 오버로딩(overloading) - (엉어 뜻: 과적) 함수에서 함수의 하나의 이름에 여러 함수를 대응시켜서 사용 - 오버라이딩(overriding) - (영어 뜻: 재정의) 클래스의 상속에서 상위클래스의 속성/메서드를 재정의(기능을 약간 변형하여 사용)하는 것 - 재정의 - 서브클래스에서 슈퍼클래스의 동일한 멤버를 변형하여 구현 - 재정의 가능한 대상(멤버) - 1) 속성 (하지만, 저장 속성에 대한 재정의는 어떠한 경우에도 불가능) - 2) 메서드 (메서드, 서브스크립트, 생성자..
보호되어 있는 글입니다.
외부에서 private 로 선언된 속성/메서드에는 접근 불가 -> 은닉화(캡슐화) class SomeClass { private var name = "이름" func nameChange(name: String) { self.name = name } } var s = SomeClass() s.nameChange(name: "홍길동") 접근 제어가 필요한 이유? 애플이 자신들이 원하는 코드를 감출 수 있음 코드 영역을 분리시켜 효율적 관리 가능 컴파일 시간이 줄어듬(해당 변수가 어느 범위에서만 쓰이는지를 컴파일러가 인지 가능하므로)
서브스크립트 대괄호를 이용해서 접근가능하도록 만든 문법을 가르킴 - 배열에서 array[인덱스] - 딕셔너리에서 dictionary[키] var array = ["Apple", "Swift", "iOS", "Hello"] array[0] array[1] // 내부적으로 대괄호를 사용하면 어떤 값을 리턴하도록 구현이 되어 있어서 가능한 일 // 인스턴스.0 // 인스턴스.method() =====> 이런 형태가 아닌 // 인스턴스[파라미터] =====> 이런 형태로 동작을 가능하게한 문법 (대괄호로 메서드의 기능을 대신) 서브스크립트는 특별한 형태의 메서드 1) (인스턴스) 서브스크립트(Subscripts)의 직접 구현 - 클래스, 구조체, (열거형) 메서드기 때문에 인스턴스에 메모리 공간이 할당되어있지 ..

만약, 열거형의 케이스가 늘어난다면 항상 올바른 처리를 하고 있다고 말할 수 있을까? 만약에 로그인의 경우의 수가 늘어난다면 (Non-frozen 열거형 / 얼지않은) (프로젝트에서 실제 늘어날 수 있는 경우가 많음) enum LoginProvider: String { // 3가지 케이스 ===> 4가지 케이스 case email case facebook case google case kakaotalk } let userLogin = LoginProvider.email // 스위치문은 (특히, 열거형)표현식에 대한 분기처리에 최적화 // (다만, 열거형의 케이스가 늘어나는 경우에 대한 안정성 보장은 별개) switch userLogin { // 처리하는 방식을 조금 변형 case .email: print..
열거형 내부에 "연관값"을 사용 시 (1) 열거형 케이스 패턴, (2) 옵셔널 패턴이 나온다. 옵셔널 패턴에서는 let 변수? 라고 쓴다. let a: Int? = 1 // 1) 열거형 케이스 패턴 (앞에서 배운) switch a { case .some(let z): print(z) case .none: // nil이라고 써도됨 print("nil") } // 2) 옵셔널 패턴 (현재 배울) switch a { case let z?: // .some을 조금 더 간소화하는 문법 print(z) case nil: // .none 이라고 써도됨 print("nil") } 옵셔널 패턴의 사례(열거형 케이스와 비교) // 옵셔널타입으로 선언 let num: Int? = 7 print(num) // 1) 열거형 케..