Day 2
- 새롭게 알게 된 사실 위주로 정리할 예정이다. (다른 언어에서 접해보지 못한 내용들)
- 나누기 연산자
- 정수끼리의 연산에서는 몫.
- Double(4/5) ≠ Double(4) / Double(5)
- Swift에서는 a++, ++a 와 같은 연산자(X)
- 연산자 우선순위
- 할당이 우선 젤 낮다는 정도로 알기
- 접근연산자
- 점문법/명시적 멤버 표현식
- 하위 개념으로 접근한다고 인지하기
- 접근연산자의 활용
- Int.random(in: 1…10)
- 하위에 내부적으로 구현된 기능의 의미
- 1부터 100, 범위 내에서
- 글자 수 세기
- name.count
- Int.random(in: 1…10)
프로그래밍의 기본 원리
- 순차
- 개발자가 정한 규칙에 따라 순차적으로 한 줄씩 실행한다.
- 조건
- 조건에 따라 어떤 동작을 할지 말지 여부를 따짐.
- 분기 : 조건에 따라, 선택적으로 코드를 실행하는 것
- 반복
- 추후에 다룬다.
if문
- 신기하게 괄호를 옆에 붙이지 않는다.
- 모든 조건에 대한 처리 가능
- if문에서 논리적인 구조 및 조건의 순서가 중요
- 타입만 일치한다면 언제든지 중첩이 가능 → 2, 3중 상관X
switch문
switch 변수 {
case value1 :
code
case value2 :
code
case value3 :
code
...
default : //모든 케이스를 case 구문에서 다루지 않을 때 나머지 경우에 대해선 default로 처리
break; //실행하려는 게 없을 때, switch문에서 반드시 break 키워드 작성
}
- 조건을 부등식이 아닌 “==”와만 비교
- 매칭된 값에 대한 고려없이, 무조건 다음문장도 실행하고 싶을 땐 “fallthrough” 키워드 사용
- 실제 앱 등의 분기처리에 많이 사용
- if문보다 한정적인 상황에서 사용
- 케이스의 ,(콤마)는 or의 의미로 하나의 케이스에 여러 매칭값을 넣을 수 있음.
switch문 주의 사항
- 비교연산자와 값을 넣으면 안되고, 비교하려는 값이 와야함
// 잘못된 예시
switch age {
case age < 0 :
print("잘못된 입력")
case age >= 0 && age <= 19 ;
print("미성년자")
case age > 19 :
print("성인")
default :
break;
}
- 부등식 사용 대신에, 범위 매칭을 사용
// 올바른 예시
var age = -1
// 올바른 예시
switch age {
case ...0 :
print("잘못된 입력")
case 1...19 :
print("미성년자")
case 20... :
print("성인")
default :
break;
}
- value 바인딩을 통한 switch문 사용
var num = 6
switch num {
case let a: // 사실 여기선 num만 써도 상관이 없다.
print("숫자: \(a)")
default
break
- 왜 value 바인딩이 중요한 가?
- switch문 안에 조건을 추가하고 싶으면 바인딩과 where절을 사용하면 되기 때문이다.
- 그냥 부등식을 작성할 시 오류 발생
- where절을 사용
where
키워드는 다양한 문맥에서 사용되며, 주로 조건을 추가하는 데 활용- where키워드는 조건을 확인하는 키워드
switch num {
case let x where x % 2 == 0: // let x = num <- 바인딩의 의미
print("짝수 숫자: \(x)")
case let x where x % 2 != 0:
print("홀수 숫자: \(x)")
default:
break
}
튜플
- 2개 이상의 연관된 데이터(값)를 저장하는 Compound(복합/혼합) 타입
let pair: (Double, Double) = (1.0, 2.0)
let threeDimension: (Int, Int, Int) = (1, 2, 3)
pair.0 // 1.0
pair.1 // 2.0
let pairInstance = (x: 1, y: 2)
pairInstance.x // 1
pairInstance.y // 2
let (x, y) = pair
x // 1.0
y // 2.0
// 튜플의 값 비교
(1, "apple") < (1, "banana") // 왼쪽부터 오른쪽으로 차례대로 비교될 때까지 진행
// -> 단 Bool 값은 비교 불가능, type도 일치해야.
튜플과 switch문
let my = (country: "Korea", age: 24)
if my == ("Korea", "24") {
print("this is me!")
}
if my.county == "Korea" &&* my.age == 24 {
print("this is Me!")
}
switch my {
case ("Korea", "24"):
print("this Is Me!")
case let x where x.county == "Korea" && x.age == "20":
print("this isn't me!")
default:
break
}
var coordinate = (0, 5)
switch coordinate {
case (let distance, 0), (0, let distance):
print("X 또는 Y축 위에 위치하며, \(distance)만큼의 거리가 떨어짐")
default:
print("축 위에 있지 않음"0
}
switch coordinate {
case (let x, let y) where x == y: //일단 x, y를 상수로 지정해주고, 그리고 나서 비교한다.
print("(\(x), \(y))의 좌표는 y = x 1차함수의 그래프 위에 있다.")
case let (x, y) where x == -y:
print("(\(x), \(y))의 좌표는 y = -x 1차함수의 그래프 위에 있다.")
case let (x, y):
print("(\(x), \(y))의 좌표는 y = x, 또는 y = -x 그래프가 아닌 임의의 지점에 있다.")
}
- 튜플을 사용하는 이유→ 함수는 원칙적으로 리턴값이 한개만 존재하기 때문에 여러개의 값을 반환할 수 없지만, 어떤 묶음 값으로 반환하는 것은 가능
- → 함수와 연관지어서
범위연산자
→ 제한된 숫자의 범위를 표기하기 위한 연산자. 자체가 특별한 타입을 의미
- 규칙
- 내림차순 형식으로 표기 불가능
- 오름차순 → 변환
- 실수 형식의 범위도 가능
- 내림차순 형식으로 표기 불가능
- 특정한 경우에 활용
- switch문에서 패턴 매칭에 사용
- for문과 함께 사용
- 배열의 서브스크립트 문법과 함께 사용
- 종류
- Closed Range Operator→ 1… (정수 1이상) // PartialRangeFrom
- → …10 (정수 10이하) // PartialRangeThrough
- → 1 … 10 (정수 1~10) // ClosedRange
- Half-Open Range Operator→ ..< 10 (정수 10미만) //PartialRangeUpTo
- → 1 ..< 10 (정수 1부터 10미만) // Range
패턴매칭 연산자(~=)
- a…b ~= age
- ~= : 오른쪽에 있는 표현식이 왼쪽의 범위에 포함되는 지에 따라 참과 거짓을 리턴
반응형
'iOS > Swift' 카테고리의 다른 글
Swift Day 6 (0) | 2024.01.09 |
---|---|
Swift Day 5 (1) | 2024.01.09 |
Swift Day 4 (0) | 2024.01.09 |
Swift Day 3 (0) | 2024.01.09 |
Swift - Day 1 (1) | 2024.01.09 |