상수와 변수의 저장 가능 파라미터, 리턴값에 쓰일 수 있는 객체
UpperCamelCase를 사용하는 경우
lowerCamelCase를 사용하는 경우
크게 전역범위(Global Scope), 지역범위(Local Scope)가 존재한다.
괄호안에 선언되었다면 지역 범위안에 있다고 한다. 그렇지 않다면 전역범위이다.
구조체의 처음 범위는 선언 스코프라고 불리며, 함수의 선언이나 변수 선언만 가능하다.
서로 다른 범위의 동일한 이름이 존재한다면, 가장 인접한 범위의 이름을 사용한다
let a = 1
func doSomething() {
let a = 2
print(a) // 2
}
스위프트의 타입 변환 문법, 일반적인 타입 캐스팅과의 차이로는 Type Conversion은 새로운 값을 만든다는 차이가 있다. Type Casting은 기존의 값을 컴파일러가 바꾸는 방식
let a = 1.5
let b = 2
Int(a) + b // 1 + 2
a + Double(b) // 1.5 + 2.0
타입의 이름을 새로운 이름으로 만드는 문법 사용 방식은 다음과 같다.
typealias NewName = TypeName
typealias Coordinate = Double
let a: Coordinate = 1.23
let b: Coordinate = 32.12
프로그래밍에서 Side Effect는 코드의 실행 결과로 인해서, 값 또는 상태가 변경이 되었다는 의미를 나타낸다.
논리식을 작성할 때 Side Effect가 발생하는 코드는 논리식 작성 전에 빼두는 편이 좋다(상수에 넣는 방식을 활용해보기)
스위프트는 범위 연산자(Range Operator)를 제공한다.
// Closed Range Opertor
1...10 // 1에서 10까지 다 나타냄
(1...10).reversed() // 내림차순으로 나타내줌
list[2...] // index가 2부터 끝까지의 범위
list[...2] // 처음부터 index 2까지의 범위
// Half-Open Range Operator
1..<10 // 1 이상 10 미만
list[..<2] // index 2 미만 까지의 범위
// 일반적인 스위치문의 케이스에서 where문을 추가해서 한번 더 조건을 확인이 가능하다.
switch num {
case let n where n <= 10: // 이때 n은 num의 값을 받는다.
// Value Binding Pattern, Switch문에서만 사용 가능.
print(n)
default:
print("others")
}
// fallthrough문
switch num {
case 1:
print("one")
case 2:
print("two")
fallthrough
case 3:
print("three")
default:
break
}
// "two", "three" 둘 다 출력, fallthrough를 통해서 다음 케이스까지 실행함
코드를 보며 살펴보겠습니다.
func validate(id: String?) -> Bool {
// guard문은 else가 필수적, 그리고 else문에서 코드를 종료해야하는 코드가 필수
guard let id = id else {
return false // 이 코드가 실행이 되면 함수가 종료된다.
}
// id.count가 true이면 guard문 다음 코드부터 실행을 시작함
guard id.count >= 10 else {
return false
}
return true
}