// 정상 동작
var 변수명: 데이터타입 = 값
// 값의 데이터타입을 자동으로 판별하여 변수에 데이터타입을 지정
var 변수명 = 값
// 오류 발생 (선언과 값 대입이 분리되어 있는 경우)
var 변수명
변수명 = 값
let 변수명: 데이터타입 = 값
// 기본 형식
func 함수명 (매개변수, ~) -> 반환형 { 명령어; return 반환값 }
// 레이블 활용
func 함수명 (매개변수명 전달인자레이블: 매개변수타입, ~) -> 반환형 { 명령어; return 반환값 }
// 기본 예시 : 레이블 사용
func funcSample(first name : String, second age : Int) -> Void {
명령어;
}
// 함수 호출
funcSample(first : "문익점", second : 26)
// '_' 사용 : label을 생략하고 값만 대입하여 호출할 수 있음
func funcSample(_ name : String, second age : Int) -> Void {
명령어;
}
// 함수 호출
funcSample("문익점", second : 26)
Swift에서
nil
은 다른 언어의 Null과 같이 아무런 값이 없는 상태를 의미한다.
정수 + 정수를 계산하기 위해 변수끼리 더했는데, 하나의 값이 nil
이라면 오류가 발생한다.
이 때, 일반적인 변수에는 nil
값이 들어갈 수 없는데, 이를 non-optional
이라고 한다.
반대로 optional
인 변수는 nil
값이 들어갈 수 있는 변수를 말한다.
// 물음표를 붙이면 옵셔널 변수가 된다...!
var variable: String?
optional
로 선언된 변수에 nil
이 아니라 값이 분명히 들어있다고 확신한다면, !
를 통해 값을 강제로 꺼낼 수 있다.
var sum = variable! + variable!
// 여기서 optional 변수 variable에 nil값이 들어있다면 에러가 발생하므로
// nil값이 들어있는지 검사 후 사용이 필요하다.
!
을 사용하지 않고 새로운 상수를 선언한 뒤 상수에 옵셔널 변수의 값을 넣어보고, nil
이 아니면 연산에 사용하는 방식.
// 사용 예시
if let nonOptionalVariable = OptionalVariable { 연산 }
Optional Chaining은 Optional Wrapping과 다르게 값이 없어도 에러가 아닌 nil 값을 반환한다.
따라서 Optional Chaining의 값은 언제나 optional
값이 된다.
class Bus {
var people : People?
}
class Bus {
var countOfPeople : Int? = 13
}
위의 예제로, 버스의 인스턴스 bus
에 승객이 없을 수 있으니 optional
이라고 할 때,
bus.people!.countOfPeople
으로 값에 접근한다면 런타임 에러가 발생할 수 있다.
이를 피하기 위해 bus.people?.countOfPeople
을 사용하면 nil
값이어도 값에 접근할 수 있어
if문 등으로 분기하여 다르게 처리할 수 있다.
위 방법을 사용하면 people, countOfPeople 두 변수 모두의 옵셔널 바인딩을 처리할 수 있다.