[TIL] Swift 문법 옵셔널 체이닝(Optional Chaining)
·
SwiftUI/문법
옵셔널 체이닝(Optional Chaining) 언래핑 없이 옵셔널 값의 멤버에 접근 현재 Nil일 수 있는 옵셔널인 프로퍼티, 메서드, 서브스크립트를 조회하고 호출하기 위한 프로세스 옵셔널에 값이 포함되어 있으며 프로퍼티,메서드,서브스크립트는 호출에 성공 옵셔널이 nil 이면 프로퍼티,메서드,서브스크립트 호출은 nil을 반환 여러 조회는 함꼐 연결될 수 있고 체인에 어느 부분이라도 nil이면 전체 체인은 실패 강제 언래핑 대안으로 옵셔널 체이닝(Optional Chaining as an Alternative to Forced Unwrapping) 프로퍼티,메서드,서브스크립트를 호출하려는 옵셔널 값 뒤에 물음표(?)를 배치하여 옵셔널 체이닝을 지정,값에 강제 언래핑을 하기 위해 옵셔널 값 뒤에 느낌표(!..
[TIL] Swift 문법 초기화(Initializer) - 2
·
SwiftUI/문법
클래스 타입에 대한 초기화 구문위임(Initializer Delegation for Class Types) 지정된 초기화 구문과 편의 초기화 구문 사이의 관계를 단순화 하기위해 Swift는 초기화 사이의 위임 호출에 대한 3가지 규칙 적용 지정된 초기화 구문은 상위 클래스로부터 지정된 초기화 구문을 호출 편의 초기화 구문은 같은 클래스로부터 다른 초기화 구문을 호출 편의 초기화 구문은 궁극적으로 지정된 초기화 구문을 호출 지정 초기화 구문은 항상 위로 위임 편의 초기화 구문은 항상 옆으로 위임 2단계 초기화(Two-Phase Initialization) Swift에서 클래스 초기화는 2단계 프로세스, 첫번째 단계에서 각 저장된 프로퍼티가 해당 프로퍼티를 도입한 클래스에 의해 초기값이 할당 저장된 프로퍼티..
[TIL] Swift 문법 초기화(Initialization) - 1
·
SwiftUI/문법
초기화 클래스, 구조체, 열거형 인스턴스를 사용하기 위해 준비 작업을 하는 단계 각 저장 프로퍼티의 초기 값을 설정 초기화 과정은 initializer를 정의 하는 것으로 구현 Swift initializer는 값을 반환 ❌ 초기화와 반대로 여러 값과 자원의 해지를 위해 deinitializer도 사용 저장 프로퍼티를 위한 초기값 설정(Setting initial Values for Stored Properties) 인스턴스의 저장 프로퍼티는 사용하기 전에 반드시 특정 값으로 초기화 기본값으로 설정할 수 있고, 특정 값을 설정할 수도 있음 initializer에서 저장 프로퍼티에 값을 직접 설정하면 프로퍼티 옵저버가 호출되지 않고 값 할당이 수행 이니셜라이저 (Initializers) 이니셜라이저는 특정..
[TIL] Swift 문법 상속(Inheritance)
·
SwiftUI/문법
상속(Inheritance) class는 메소드, 프로퍼티와 다른 특징을 다른 클래스로 부터 상속할 수 있음 Swift에서 클래스가 다른 타입과 구분되는 근본적인 요소 저장된 프로퍼티, 계산된 프로퍼티 상관없이 상속받은 프로퍼티에 프로퍼티 옵저버를 설정하여 값 설정에 반응 기반 클래스 정의 (Defining a Base Class) 다른 어떤 클래스로부터 상속받지 않은 클래스를 기반 클래스라고 함 class Bulmang { var age = 25 var description: String { return "bulmang's age is \\(age)" } func developApp() { } } print("Bulmang: \\(Bulmang.age)") // Bulmang: bulmang's age..
[TIL] Swift 문법(Subscripts)
·
SwiftUI/문법
서브스크립트(Subscripts) Class,Struct,enum 스크립트를 정의해 사용, 콜렉션,리스트, 시퀀스등(서브스크립트) 집합의 특정 멤버 엘리먼트에 간단하게 접근할 수 있음 서브 스크립트를 이용한다면 추가적인 메소드 없이 특정 값을 할당할거나 가져올 수 있음 예시 배열 인스터스의 특정 엘리먼트는 someArray[index]문법 Dictionary instance의 특정 엘리먼트는 someDictionary[key]로 접근할 수 있음 하나의 타입에 여러 서브스크립트로 정의 할 수 있고 Overload도 가능 var myArray = [1, 2, 3, 4, 5] // 서브스크립트를 사용하여 인덱스 0의 값을 가져옴 let firstElement = myArray[0] // 1 // 서브스크립트를..
[TIL] Swift 문법 메소드(Methods)
·
SwiftUI/문법
메소드(Methods) 특정 타입의 Class, Struct, enum과 관련된 함수 특저 타입의 인스턴스에서 실행할 수 있는 메소드를 인스턴스 메소드, 특정 형과 관련된 메소드를 타입 메소드 인스턴스 메소드(Instance Methods) 특정 Class,Struct,enum (OOP)의 인스턴스에 속한 메소드 인스턴스 내의 값을 제어하거나 변경할 수 있음 // Counter클래스를 선언하고 인스턴스 메소드로 각각 increment(), increment(by amount: Int),reset()를 //정의해 인스턴스 내의 countproperty를 변경하는 기능을 수행 class Counter { var count = 0 func increment() { count += 1 } func increme..
[TIL] Swift 문법 클래스와 구조체
·
SwiftUI/문법
클래스와 구조체(Classes and Structures) 클래스와 구조체는 프로그램의 코드를 조직화 하기 위해 일반적으로 사용 OOP를 위한 필요 요소 클래스와 구조체의 비교 (Comparing Classes and Structures) Swift에서 클래스와 구조체는 많은 공통점이 있움. 클래스와 구조체 둘다 다음과 같은 기능이 가능. 공통점 값을 저장하기 위한 프로퍼티 정의 기능을 제공하기 위한 메소드 정의 subscript 문법을 이용해 특정 값을 접근할 수 있는 subscript정의 초기 상태를 설정할 수 있는 initializer 정의 기본 구현에서 기능 확장 특정한 종류의 표준 기능을 제공하기위 한 프로토콜 순응 프로퍼티, 메소드, 서브스크립트, 초기화, 확장 그리고 프로토콜을 참조 구조체로..
[TIL] Swift 문법 열거형(Enum)
·
SwiftUI/문법
열거형 열거형은 관련된 값으로 이루어진 그릅을 공통의 형으로 선언해 형 안전성(type-safety)을 보장하는 방법으로 코드를 다룰 수 있게 해줌. case값이 string,character,integer,floating 값들을 사용 가능 열거형 1급 클래스 형이어서 계산된 프로퍼티를 제공하거나 초기화를 지정하거나,초기 선언을 확장해 사용 enum키워드를 사용해 열거형을 정의 enum CompassPoint { case north case south case east case west } // 콤마로 구분 가능 enum Planet { case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune } Swift에서 열거형은 생성될 때 각 case..
[TIL] Swift 문법 클로저(Closures)
·
SwiftUI/문법
클로저 💡 클로저는 코드 블록(중괄호{} 에 둘러싸인 코드)으로, 독립적인 기능을 수행하는 함수와 비슷한 역할 함수와 마찬가지로 입력 매개변수와 반환 값이 있을 수도 있음,다른 함수에 전달 할수 있고 함수 내부에서 선언하여 사용 가능.클로저를 사용하여 함수의 매개변수로 전달가능 클로저의 일반적인 사용 사례 : 비동기적으로 실행되는 코드에서 콜백함수로 사용 클로저는 어떤 상수나 변수의 참조를 캡처해 저장, Swift는 이 캡처와 관련한 모든 메모리를 알아서 처리 클로저 포현(Closure Expressions) 인라인 클로저를 명확하게 표현하는 방법으로 문법에 초점이 맞춰짐. 코드의 명확성과 의도를 잃지 않으면서도 축약해 사용할 수 있음으로 문법의 최적화 방법 제공 정렬 메소드(The Sorted Meth..
[TIL] Swift 문법(함수 Functions)
·
SwiftUI/문법
함수 정의와 호출 함수를 선언할때는 가장 앞에 func 키워드를 붙이고 (person:String) 파라미터와 형 그리고 → String 형태로 정의함 func example(person:String) -> String { let greeting = "Hello," + person + "!" return greeting } 정의한 함수에 인자 값을 넣어 호출한 예시 print(example(person: "Bulmang")) // Print "Hello, Bulmang!" 위 함수에서 메세지를 결합하는 부분과 반환하는 부분을 합쳐서 더 짧게 만들 수 있음 func shortExample(person: String) -> String { return "Hello again, " + person + "!" ..
[TIL] Swift 제어문
·
SwiftUI/문법
For-In 문(For-In Loops) for-in문는 배열,숫자,문자열을 순서대로 순회하기 위해 사용 let name = ['Bulmang','Jun','Malty','Nova','Jay'] for name in names { print("Hello, \\(name)!") } Dictionary에서 반환된 키값쌍으로 구성된 튜플을 순회하며 제어 가능 let number = ['Bulmang':25,'Jun':27,'Malty':29,'Nova':23,'Jay':29] for (name,age) in nubmer { print("\\(name) : \\(legCount)") }ㅓ Dictionary에 담긴 내용은 정렬이 되지 않은 상태, 사전에 넣었던 순서대로 순회되지 않음.아래와 같이 숫자 범위를 지..
[TIL] Swift 문법(문자열과 문자)
·
SwiftUI/문법
💡 Swift의 String은 Foundation 프레임워크의 NSString이 bridge된 타입이기 때문에 NSString의 메소드를 String에서 캐스팅 없이 사용 가능합니다. 내가 이 글을 읽었을 때 이해한것은 Foundation안에 NSString이 있어서 String을 사용할 수 있다. 정확히 이해하기 위해 검색을 해봤다. bridge : Objective-C 간의 상호 운용성을 위해 제공되는 기술로, Swift 코드와 Objective-C 코드 간의 상호작용을 가능하게 한다. Swift는 Foundation 프레임워크와의 높은 상호 운용성을 지원하기 위해, **String**과 NSString 사이의 자동적인 타입 변환을 제공합니다. 따라서 **String**에서 **NSString**의 ..
[TIL] 점근적 분석 & 사업계획서
·
SwiftUI/문법
점근적 분석 서비스 개발에서 원하는 정보를 신속하게 찾는일은 매우 중요 어떤 데이터 구조, 알고리즘도 모든 비즈니스 상황에서 최적의 성능을 제공하지 못함 알고리즘이 최적의 성능을 낼 수 있는지 확인하기 위해 실행속도를 측정 알고리즘의 실행 비용 or 복잡성의 측정에 대한 이야기를 꺼낼 때는 입력값이 상당히 큰 규모를 의미 점근적 분석을 통해 아래의 답을 얻을 수 있다. (데이터가 폭주하는) 최악의 상황이라면, 얼마만큼의 저장 공간이 필요한가? 알고리즘이 특정 규모의 입력값을 처리하는 데 걸리는 시간은 얼마인가? 과연 그 문제를 해결할 수 있는가? 예 숫자 목록을 정렬하는 함수의 실행 시간 분석, 입력 데이터 크기에 따라 함수의 실행시간이 얼마나 길어져야할지 알아야 한다. 정렬 알고리즘의 성능을 비교하기 ..
[TIL] 기본 연산자(Basic Operators) & 데이터 구조
·
SwiftUI/문법
Swift에서는 통상적으로 산술연산자, 논리연사자 a.. b) 작다 (a = b) 작거나 같다 (a
[TIL] Switch문, 삼항연산자, 데이터구조
·
SwiftUI/문법
Switch와 if 사용하는 이유 switch문장은 완전하다, 즉 이 문장은 case 체크 할 수 있는 모든 값의 블록 또는 사용자가 가지고 있어야 한다. default, if, else if는 놓칠 수 있다. 여러 개의 가능한 결과에 대한 값을 확인하려면 해당 값은 한번만 읽히지만 if는 여러번 읽는다. 함수 호출의 일부는 속도가 느려질 수 있기 때문에 함수 호출을 사용하기 시작할때 기능이 중요하다. 다루기 어려운 고도의 패턴 매칭을 가능하게 한다. 추가로 3개이상의 동일한 값을 체크하고 싶다면 사용하기도 한다. Switch 문장은 처음에 확인해야 할 어떤 값이 필요하다. default: 모든 case 값이 일치하지 않을 때 실행되는 코드 블록이다. 코드 예시 int num = 3; String res..