조건문

주어진 조건에 따라서 어플리케이션이 다르게 동작하는 것

if문

if 문은 조건식이 참이 되는 경우에 그에 일치하는 결과가 실행되도록 하는 조건 구문이다.

if 조건식1 {
	조건1을 만족할 경우 실행할 구문
} else if 조건식2 {
	조건2를 만족할 경우 실행할 구문
} else {
	만족하지 않으면 실행할 구문
}

switch문

switch 문은 먼저 변수 또는 상수에 어떤 기준이 되는 데이터를 선언하고, 해당 데이터를 여러 패턴들과 비교하도록 함으로써, 그에 일치하는 결과가 실행되도록 하는 조건 구문이다.

switch 비교대상 {
	case 패턴1:
		비교대상이 패턴1일 경우 실행할 구문
	case 패턴2, 패턴3:
		비교대상이 패턴2, 3일 경우 실행할 구문
	default:
		비교대상이 위의 1,2,3 어느 패턴과도 일치하지 않을 때 실행할 구문
}
let temperature = 30

switch temperature {
	case -20...9:
		print("겨울입니다")
	case 10...14:
		print("가을입니다")
	case 15...25:
		print("봄입니다")
	case 26...35:
		print("여름입니다")
	default:
		print("이상기후입니다")
}
// "여름입니다"

guard문

함수 안에서 활용되며, guard 문 안의 조건을 만족하는 경우 그에 맞는 결과를 실행

반복문

반복적으로 코드가 실행되게 만드는 구문

for 반복문

for 루프상수(= 보통 i) in 순회대상(= '...'으로 정의하는 범위) {
	실행할 구문
}

while 반복문

while 조건식 {
	실행할 구문
}
var number = 5

while number < 10 {
	number += 1
}

number
// 10

repeat while 반복문

repeat {
	실행할 구문
} while 조건식
var x = 6

repeat {
	x += 2
} while x < 5

x
// 8

옵셔널

값이 있을 수도 있고 없을 수도 있는 것을 나타내는 것

var name: String = ""
// 값이 빈 문자열 ""인 것을 의미

var number: Int = 0
// 값이 정수 0인 것을 의미

var name: String?
var name: String? = nil
var name: String? = "Gunter"
// 모두 옵셔널한 상황을 전제하며, 값이 없을 수도(nil) 있음을 의미

var number: Int?
var number: Int? = nil
var number: Int? = 10
// 모두 옵셔널한 상황을 전제하며, 값이 없을 수도(nil) 있음을 의미

옵셔널하지 않은 변수에 옵셔널한 값을 대입할 수는 없다. 왜냐하면 옵셔널한 값은 Optional()의 형태로 포장(wrapped) 되기 때문이다.

var optionalName: String? = "Gunter"
print(optionalName)
// Optional("Gunter")


var requiredName: String = optionalName
// Value of optional type 'String?' must be unwrapped to a value of type 'String'...

이러한 포장을 벗겨내어, 옵셔널한 값을 자유롭게 여기저기에 쓸 수 있게 하는 것을 바로 '옵셔널 바인딩'이라고 한다.

옵셔널 바인딩

옵셔널을 해제하는 방법에는 크게 두가지가 있다.

명시적 해제

강제해제: 옵셔널로 선언된 변수 뒤에 !를 붙이는 것.. 만약 변수가 nil이라면 위험!

var number: Int? = 3
print(number)
// Optional(3)

print(number!)
// 3

비강제해제(=옵셔널 바인딩) : 조건문으 활용하여 안전하게 옵셔널을 탈출 가능하게 함!

// if문을 활용한 옵셔널 바인딩
if let result = number {
	print(result)
}
// 3

// guard문을 활용한 옵셔널 바인딩
func test() {
	let number: Int? = 3
	guard let result = number else {
		return
	}
	print(result)
}

test()
// 3

묵시적 해제

컴파일러에 의한 자동해제

let value: Int? = 3
if value == 3 {
	print("value가 3입니다")
} else {
	print("value가 3이 아닙니다")
}
// "value가 3입니다"

타입 변경을 통한 묵시적 해제

	let string = "3"
	var stringToInt: Int! = Int(string)
	print(stringToInt + 1)
	// 4
  
profile
전직 시스템엔지니어, 현직 데이터엔지니어, 하지만 하고 싶은건 iOS 개발

0개의 댓글