Swift 문법 - 1
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 프로그래밍 강의 - 한성현 교수님