iOS

Swift 문법 - 1

mJay8194 2023. 9. 19. 12:46

1. 연산자(operator)

1.1. precedence(우선순위)와 associativity(결합성)

- 각 연산자는 우선순위를 가지며, 우선순위에 따라 연산의 순서가 결정- 우선순위가 같을 경우, 연산자의 결합성에 따라 순서가 정해짐(대입 연산자를 제외하고 좌측부터 연산)

1.2. 증감 연산자

- swift 3부터 증감 연산자는 지원하지 않음ex) x--; y++;

1.3. 범위 연산자

정수 x와 y에 대해서- closed range operator(x...y): x에서 시작하여 y로 끝나는 범위에 포함되는 숫자- half-open range operator(x..<y): x에서 시작하여 y가 포함되지 않는 범위의 모든 숫자- *범위 연산자를 이용한 for문 활용

2. 자료형(type)

- swift는 Type safety 언어(다른 자료형에 대입, 연산 불가능)

2.1. type casting(형 변환)

- upcasting: 자식 인스턴스를 부모 클래스로 변환- downcasting: 부모 인스턴스를 자식 클래스로 변환하며,성공 확신이 있을 경우 as!를 사용하여 강제 변환, 불확실할 경우 as?를 통해 변환이 안될경우 nil 반환을 하며 안전하게 변환

 

3. Optional

3.1. optional type

- optional:  변수가 값을 가지고 있거나, 아무런 값도 가지고 있지 않을 수 있다는 것을 표현하는 방법

- nil: optional type을 가진 변수만 가질 수 있는 값이 없음을 뜻하는 값

- optional을 사용한 변수 선언 예

초기값이 없어도 오류가 발생하지 않는다.

- 값 리턴 시 오류 발생의 여지가 있는 경우 optional type으로 반환

- 내장 함수의 optional 반환 예

3.2. wrapping

- optional 변수에 값이 있으면 optional로 wrapping되었다고 표현

- wrapping된 값은 자료형에 관계없이 연산 및 대입이 불가능

- wrapping된 값은 forced unwrapping을 통해 풀 수 있음

3.3. forced wrapping - 강제 추출 연산자 !

- wrapping된 변수 뒤에 !를 붙여 forced wrapping 가능

- forced wrapping을 통한 값 추출 예

- 런타임 오류를 피하기 위한 if문 활용

3.4. forced wrapping - optional binding

- 옵셔널에 할당된 값을 임시 변수 또는 상수에 할당하는 방법

if let constantname = optionalName{

//옵셔널 변수가 값이 있다면 언래핑해서 일반 상수 constantname에 대입하고 if문 실행

//값이 없다면 if문의 조건이 거짓이 되어 if문을 실행하지 않음 }

if var variablename = optionalName {

//옵셔널 변수가 값이 있다면 언래핑해서 일반 변수 variblename에 대입하고 if문 실행

//값이 없다면 if문의 조건이 거짓이 되어 if문을 실행하지 않음 }

- optional binding의 예시 코드

(1)

(2)

(3)

- 콤마를 사용한 다중 언래핑

3.5. Implicitly Unwrapped Optional

- 자료형 다음에 ! 표기로 사용

- 값으로 nil을 절대 갖지 않는 경우에만 사용 가능

- 일반 optional 값으로 사용하려고 하나, 사용할 수 없는 경우 강제로 풀림

- optional로 사용되지 않을 경우 자동으로 unwrap

- ! 연산자를 이용한 optional 변수 사용 예

3.6. *Nil-Coalescing Operator

- 옵셔널 변수의 값이 nil이면 ?? 다음의 값, nil이 아닐 경우 옵셔널 변수를 unwrap한 값을 대입

- Nil-Coalescing Operator를 사용한 예시 코드

- optional 변수를 unwrapp하는 방법은 그 외에 optional chaining, map, flatMap을 이용하는 경우도 있다.

 

4. 참고자료

iOS 프로그래밍 강의 - 한성현 교수님