제어

냐옹·2024년 7월 11일
0

IOS

목록 보기
6/32

본 작성글은 swift 공식 문서를 참고하였습니다.

제어흐름

  • 조건문이나 루프변수를 둘러싼 소괄호는 선택사항이다.
  • 문 statements을 둘러싼 중괄호는 필수사항이다.
  • if / switch
  • 조건을 기준으로 값을 선택하기 위해 할당의 동등사인 =뒤나 return뒤에 if 또는 switch를 작성할 수 있다.
let scoreDecoration = if(teamScore > 10){
    "🎉"
} else {
    ""
}

print("Score :", teamScore, scoreDecoration)
// Prints "Score: 11 🎉"
  • iflet을 사용하여 누락될 수 있는 값에 대해 사용할 수 있다. 이러한 값은 옵셔널 optional로 표기된다.
  • 옵셔널 값은 값을 포함하거나 값이 없음을 나타내는 nil을 포함한다.
  • 옵셔널로 값을 표시하기 위해서 물음표 ?를 작성한다.
var optionalString : String? = "Hello"
print(optionalString == nil)
// false

var optionalName : String? = "John Appleseed"
var greeting = "Hello!"
if(let name = optionalName){
	greeting
}
  • if let : 값이 있는 경우와 값이 없는 경우(nil)를 체크한다.
  • 여기서 let 상수에 옵셔널로 할당된 값을 할당함으로서 옵셔널을 벗기는 작업을 한다.
  • if let에서 선언한 let은 지역변수로서 해당 스코프{}를 벗어나지 못한다.
var optionalValue : Int?;
optionalValue = 2
print(optionalValue)
// Optional(2)

if let value = optionalValue{
	print(value)
} else {
	print("값이 없음")
}
// 2
  • 옵셔널값이 nil이면 조건은 false이고, 중괄호 안의 코드는 건너뛴다.
  • 옵셔널 값이 nil이 아니면 옵셔널 값은 언래핑되고,let뒤의 상수로 할당되어 코드블럭 안에서 언래핑된 값으로 사용할 수 있다.
  • 옵셔널 값을 처리하는 다른 방법은 ??연산자를 사용하여 기본값을 제공하는 것이다. 옵셔널값이 없다면 기본값이 대신 사용된다.
let nickname : String? = nil
let fullname : String = "John"
let informalGreeting = "Hi \(nickname ?? fullname)"
// Hi John

더 짧게 같은 이름으로 언래핑된 값을 사용할 수 잇다.

let nickname : String? = nil

if let nickname {
	print("Hey, \(nickname)")
}
// 이경우에 아무것도 출력되지 않음
  • 스위치 switch는 모든 종류의 데이터와 다양한 비교작업을 지원한다.
  • 스위치정수동등성 비교로 제한되지 않는다.
  • whereswitch 안에서의 조건 추가에 사용한다.
  • 일치하는 스위치 case문을 실행하고 프로그램은 스위치 문을 종료한다. 다음 케이스로 이어서 실행되지 않기 때문에 각 케이스 코드에 명시적으로 스위치 종료를 할 필요가 없다.
let vegetable = "red pepper"
switch vegetable {
case "celery":
    print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
    print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
    print("Is it a spicy \(x)?")
default:
    print("Everything tastes good in soup.")
}
// Prints "Is it a spicy red pepper?"
  • for-in을 사용하여 각 키-값쌍에 사용할 이름의 쌍을 제공하여 딕셔너리의 항목을 조회한다.
  • 딕셔너리는 순서가 없는 컬렉션 collection이므로 키와 값은 임의의 순서로 조회된다.
let interestingNumbers = [
	"prime" : [2,3,5,7,11,13],
    "fibonacci" : [1,1,2,3,5,8],
    "square" : [1,4,9,16,25],
]
    
var largest = 0
// 값만 사용
for( _, numbers) in interestingNumbers{
	for number in numbers {
    	if number > largest {
        	largest = number
        }
    }
}

print(largest)
  • 조건이 바뀔 때까지 코드의 블럭을 반복하려면 while을 사용해야한다. 대신 루프의 조건이 끝에 있을 수 있으므로 적어도 한번은 루프가 실행되도록 한다.
  • repeat while 은 다른 언어의 do while과 같다.
var n = 2
while n < 100 {
	n *= 2
}
print(n)

var m = 2
repeat{
	m *= 2
}while m < 100
print(m)
  • 인덱스의 범위를 만들기 위해선 ..<을 사용하여 루프에 인덱스를 만들 수 있다.
  • 가장 상위 값을 포함하는 범위를 만들기 위해 ..<를 사용하고 포함하려면 ...를 사용한다. 0...4 는 0부터 4(이하)이다.
var total = 0
for i in 0..<4{
	total += i
}
print(total)
// 6
var total = 0
for i in 0...4{
	total += i
}
print(total)
// 10

0개의 댓글