목록앱 개발/iOS (88)
나의 발자취
서브스크립트 대괄호를 이용해서 접근가능하도록 만든 문법을 가르킴 - 배열에서 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) 열거형 케..
열거형에 대한 구체적인 처리는 스위치문과 함께 쓸 때 사용성이 높아진다. 열거형은 한정된 사례로 만든 타입이고, 스위치문은 표현식에 대한 분기처리에 최적화 되어 있기 때문에 활용에 적합하다. // 로그인 타입을 정의 enum LoginProvider: String { // 3가지로 정의 case email case facebook case google } let userLogin = LoginProvider.facebook switch userLogin { // 3가지로 분기처리 case .email: print("이메일 로그인") case .facebook: print("페이스북 로그인") case .google: print("구글 로그인") } // 물론 특정한 경우도 처리 가능 if LoginPro..
메모리 공간에 임시적인 타입(optional(10) / nil)으로 들어있고 언랩핑을 통해 실제 값 10 또는 none으로 바뀌게 된다. 예를 들어, Int? -> ( .some / .none ) 으로 되어있으면 enum Optional { case some(Wrapped) case none } switch num { case .some(let a): // let a = 7 // 열거형 case 패턴을 활용해서, 내부 연관값을 꺼냄 print(a) case .none: print("nil") //print(num!) } ================================= .none과 nil은 완전히 동일 .none은 명시적인 열거형으로 표현한 것이고, 일반적으로는nil키워드(값이 없다)를 사용할뿐
열거형(enumerations)은 타입이다 커스텀 타입(enum, class, struct) basic type VS custom type : 연관된 상수(케이스)들을 하나의 이름으로 묶은 자료형 열거형 쓰는 법 - enum 뒤의 타입이름은 대문자로 쓰고, case는 뒤의 케이스 이름은 소문자로 쓴다.(swift 4.0~) - (1) 한 줄씩 쓰는 방법 (2) 콤마로 한줄에 적는 방법이 있다. enum Weekday { case monday case tuesday case wednesday case thursday case friday case saturday case sunday } enum CompassPoint { case north, south, east, west } 언제 사용하는지? 한정된 사..
KeyValuePairs란? 딕셔너리와 유사한 형태이지만, 배열처럼 순서가 있는 컬렉션 - 스위프트 5.2 버전에 등장 - 딕셔너리와 비슷한 형태지만, "순서"가 있는 컬렉션 - key값이 해셔블(hashable)일 필요없음 (검색 알고리즘상 빠르지 않음) - key값이 동일한 것도 가능 let introduce: KeyValuePairs = ["first": "Hello", "second": "My Name", "third":"is"] introduce.count introduce.isEmpty - []로 요소에 접근할 수 있다. Copy-On-Write 최적화 코드상에서 값을 복사해서 담는다 하더라도 실제 값이 바뀌기 전까지는 하나의 메모리 값을 공유해서 사용한다. 메모리를 적게 사용하기 위해 스위프..
Dictonary처럼 Set도 hashable해야한다. 그렇기때문에 정렬속도보다 검색속도가 빠른 경우에 사용할 수 있다. 집합의 성질을 이용한다. - Set의 문법 약속 - 생김새는 배열과 같음(따라서, 생성시 타입을 선언 해야함) - 수학에서의 집합과 동일하기 때문에 요소는 유일해야함(순서가 존재하지 않음) 타입 표기 // 단축문법 let set1: Set = [1, 2, 3] // 정식문법 let set2: Set = [1, 2, 3] 빈 set 생성 let emptySet: Set = [] let emptySet1 = Set() 기본 기능 set.count set.isEmpty set.contains(1) set.randomElement() 업데이트 (update) - 삽입하기 / 교체하기 / 추가..