Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Stacking Fire

Swift 5. 흐름 제어 본문

개발/Objective-C -> Swift

Swift 5. 흐름 제어

라우비 2017. 5. 25. 12:02

if

  • 다 똑같은데 값이 꼭 Bool이어야 함. 0이나 nil이나 암튼 딴걸로 안 됨. 그냥 true or false

switch

  • 기존 언어와 가장 많이 달라진 부분. enum이 다양하게 활용될 수 있게 바뀐 것에 맞추어 좋아짐.
  • 정수형 이외의 값이 들어갈 수 있으며, 정수 구간도 적용이 가능. ex) case 1...9:
  • break : 선택사항. 없더라도 해당 케이스가 실행되면 바로 나가버림.
  • fallthrough : break 하지 않고 그냥 계속 진행되게 할 때 사용. 별로 안 하고 싶다.
  • default: : 열거형 등이 아닌 경우에는 꼭 필요. 역시나... 왠만하면 열거형으로 쓰고 싶다.
  • where : 조건을 확장할 때 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
let randomInt: Int = Int(arc4random()%501)
var str = "Hello"
    
//범위와 중첩이 가능. 여러 케이스를 하나로 묶을 때는 쉼표로만.
switch randomInt {
case 0...99200...299400...499:
    print("\(randomInt), 백의 자리가 0이거나 짝수")
default:
    print("\(randomInt), 백의 자리가 홀수")
}
    
//스트링, 더블 등도 사용 가능. 당연히 enum도 가능.
switch str {
case "Hello":
    print(str)
default:
    print("Not Right")
}
    
//튜플도 가능. 사용시 와일드카드 적용이 가능, 동시에 값을 바인딩해서 불러오는 것도 가능.
typealias Person = (name: String, age: Int, height: Double)
    
let jongchan:   Person = ("종찬"31174.5)
let byeongjun:  Person = ("병준"31176)
let junmin:     Person = ("준민"33170)
let youngjin:   Person = ("영진"31178)
    
let tupleArr: [Person] = [jongchan, byeongjun, junmin, youngjin]
let index: Int = Int(arc4random()%4)
let testingTuple: Person = tupleArr[index]
    
switch testingTuple {
case (_, 31, _):
    print("동갑이네!")
    fallthrough
case ("종찬"31174.5):
    print("나네!")
case ("준민"let age, _):
    print("\(age)살인 준민형이네!")
default:
    print("뭐야?")
}
    
//where을 이용해 검사. 연관값 등은 와일드카드로 빼서 검사가 가능.
    
var order1: BurgerSet = BurgerSet.fullSet(burger: Burger.chicken,
                                          drink: Drink.coke,
                                          fries: Fries.french)
 
switch order1 {
case .fullSet(let burger , _, _) where (burger.rawValue == "치즈버거") :
    print("\(burger.rawValue)세트 하나요!")
    
case .fullSet(let burger , _, _) where (burger.rawValue != "치즈버거") :
    print("\(burger.rawValue)세트 하나요!")
    
case .combo:
    print("세트 하나요!")
case .doublePack:
    print("세트 하나요!")
default :
    print("got")
}
    
//Apple 예제. where을 이용해 검사.
let yetAnotherPoint = (1-1)
switch yetAnotherPoint {
case let (x, y) where x == y:
    print("(\(x), \(y)) is on the line x == y")
case let (x, y) where x == -y:
    print("(\(x), \(y)) is on the line x == -y")
case let (x, y):
    print("(\(x), \(y)) is just some arbitrary point")
}
cs

for-in

  • 똑같음. 딕셔너리의 경우는 튜플로 값이 넘어옴.

while

  • 똑같음. 단 do-while이 아니라 repeat-while

반복구문 이름표

  • 반복구문 그 자체에 이름표를 붙여 제어가 가능.
1
2
3
반복구문이름: while 조건 {
실행문
}
cs


'개발 > Objective-C -> Swift' 카테고리의 다른 글

Swift 7. 그 놈의 옵셔널  (0) 2017.06.25
Swift 6. 함수  (0) 2017.06.16
Swift 4. 연산자  (0) 2017.05.24
Swift 3. 이상한 스위프트 나라의 타입 이야기  (0) 2017.05.23
Swift 2. Data Types  (0) 2017.05.22
Comments