스위프트의 안정성이 가장 뚜렷하게 나타나는 부분, "타입에 민감하고 엄격" 그래서 다른 타입끼리는 타입캐스팅 혹은 새로운 인스턴스 생성을 해야 값을 교환할 수 있다. 이렇게 스위프트는 Type-safe 언어다. 타입과 다른 값을 할당하려고 하면 컴파일에서 타입 체크를 한 뒤 컴파일 오류를 던진다.
스위프트에서는 변수나 상수를 선언할 때 특정 타입을 명시하지 않아도 컴파일러가 할당된 값을 기준으로 변수나 상수의 타입을 결정
이미 존재하는 데이터 타입에 임의로 다른 이름(별칭)을 부여할 수 있다. typealias
타입의 이름이 따로 지정되어 있지 않은, 프로그래머 마음대로 만드는 타입이다. 지정된 데이터의 묶음이라고 표현할 수 있다. 그저 타입의 나열만으로 튜플 타입을 생성해 줄 수 있다. 갯수도 자유롭다. 이름도 붙여줄 수 있다. 별칭까지하면 금상첨화
typealias PersonTuple = (name: String, age: Int, height: Double)
let person: PersonTubple = ("Paul", 14, 124.1)
// person.name으로 접근 가능
많은 수의 데이터를 묶어서 저장하고 관리하는 컬렉션 타입을 제공한다. 배열, 딕셔너리, 세트
// 집합 연산
새.isDisjoint(with: 포유류) // 서로 배타적인지
새.idSubset(of: 동물) // 새가 동물의 부분 집합인지
동물.isSuperset(of: 포유류) // 동물은 포유류의 전체 집합인지
동물.isSuperset(of: 새) // 동물은 새의 전체 집합인지
intersection // 교집합
symmetricDifference // 여집합
union // 합집합
substracting // 차집합
컬렉션형의 특별한 함수
randomElement() 컬렉션의 임의의 요소 추출
shuffle() 임의로 뒤섞기
shuffled() 그걸 반환
enum Expression {
case number(Int)
indirect case addition(Expression, Expression)
}
indirect enum Expression {
case number(Int)
case addition(Expression, Expression)
}