swift 2(연산자, 흐름제어)
2020.03.18
‘야곰. 스위프트 프로그래밍 3판. 한빛미디어’를 바탕으로 작성되었습니다.
5장 연산자
기본 연산자
스위프트의 경우 coercion이 되지 않기 때문에 다른 타입끼리 연산을 하고 싶다면 casting을 하고 연산해야 합니다.
- A ~= B : A와 B의 패턴이 매치되는지 검사
- A…B : A이상 B이하
- A..<B : A이상 B미만
- A… : A 이상
- …A : A 이하
let num: Int = 15;
if(0..<30 ~= num){
print("10 <= \(num) < 30");
}
- A ?? B : A가 nil이 아니면 A, nil이면 B를 return (nil check할 때 유용할 듯)
- O! : O(옵셔널 개체)의 값을 강제로 추출
- V? : V(옵셔널 값)를 안전하게 추출하거나, V(데이터 타입)가 옵셔널임을 표현
사용자 정의 연산자
7 ~ 10장을 읽고 다시 작성하도록 하겠습니다.
6장 흐름 제어
if-else
조건값이 무조건 Bool 타입이어야 합니다.
let first: Int = 5;
let second: Int = 7;
if (first > second) {
print("first > second");
} else if first == second { // 조건식은 ()를 생략할 수 있습니다.
print("first == second");
} else {
print("first < second");
}
switch
- break 구문을 생략해도 정상적으로 해당 case문에서 탈출합니다.
- case를 연속 실행하려면 “fallthrough” 키워드를 사용합니다.
- C 언어와는 다르게 switch 조건 안에는 다양한 값이 들어갈 수 있습니다.
- case 비교 값에는 범위 연산자, where 절도 사용할 수 있습니다.
let num: Int = 5;
switch (num) {
case 0:
print("num == 0");
case 1...10: // 범위 연산자 사용
print("0 <= \(num) <= 10");
fallthrough; // fallthrough으로 인해 밑에 있는 case까지 실행
case Int.min..<0, 101..<Int.max:
print("\(num) < 0 or \(num) > 100");
break;
default:
print("10 < \(num) <= 100");
}
let myTuple: (key: String, value: Int) = ("key", 1995);
switch (myTuple) {
case ("key", 1000):
print("key, value correct");
case ("key", _): // 와일드카드 식별자 사용
print("key correct. value = \(myTuple.value)");
case (let key, 1995): // 값 바인딩
print("value correct. key = \(key)");
default:
print("wrong");
}
- 열거형에 대해서도 switch문을 사용할 수 있습니다.
enum Job {
case programmer
case doctor
}
let myJob: Job = .programmer;
switch myJob{
case .programmer:
print("My job is programmer");
case .doctor:
print("My job is doctor");
@unknown case _: // switch문이 모든 case에 대응하지 않을 때 경고를 줍니다.
print("My job is \(myJob)");
}
for-in
C 언어에서 자주 사용하던 for(… ; … ; …) 는 사용할 수 없습니다.
let tup: [String: Int] = ["str1": 1, "str2": 2, "str3": 3];
for i in tup{
print(i);
}
// (key: "str1", value: 1)
// (key: "str2", value: 2)
// (key: "str3", value: 3)
for i in 0...4{
print(i);
}
while
다른 프로그램 언어와 거의 동일합니다.
repeat-while
C 언어의 do-while문과 같은 기능을 합니다.
댓글남기기