본 시리즈는 아래 강의자료를 기반으로 작성되었습니다.
https://www.boostcourse.org/mo122/joinLectures/38564
필자가 생각하기에 Swift 가 가지는 큰 특징으로는 소스코드 각각 요소의 가독성이 뛰어나다는 점이다. Swift 를 한 번도 공부해본 적 없어도 어느정도 코드를 이해할 수 있을 정도이다. 이 점을 필자의 주력 언어인 Kotlin 을 공부하면서도 느꼈는데, 서로 비슷한 부분이 많아 Swift 역시 익숙하게 접근할 수 있었다.
→ true
와 false
만을 값으로 가지는 타입
var boolVar: Bool = true
boolVar = false
// boolVar = 0 컴파일 오류
// boolVar = 1 컴파일 오류
→ 64비트 정수형 타입
var intVar: Int = -100
// intVar = 100.11 컴파일 오류
→ 64비트 양의 정수형 타입
var uintVar: UInt = 100
// uintVar = -100 컴파일 오류
→ 32비트 부동소수점 기반 실수형 타입
var floatVar: Float = 3.14
floatVar = 4
→ 64비트 부동소수점 기반 실수형 타입
var doubleVar: Double = 3.14
doubleVar = 4
// doubleVar = floatVar 컴파일 오류
→ 유니코드를 사용하는 문자 타입 (큰 따옴표 "" 사용)
var characterVar: Character = "😇"
characterVar = "뮤"
// characterVar = "뮤츠" 컴파일 오류
→ 유니코드를 사용하는 문자열 타입 (큰 따옴표 "" 사용)
var stringVar: String = "스위프트 스터디 가즈아 "
stringVar = stringVar + "홧팅"
print(stringVar) // "스위프트 스터디 가즈아 홧팅"
stringVar = """
여러 줄 문자열의 경우 이렇게
큰 따옴표 세 개로 감싸면 됨미다
"""
→ Swift 의 모든 타입을 지칭하는 키워드 (모든 데이터 타입은 Any 의 하위 타입들임)
var any: Any = 100
any = "어떤 타입도 수용 가능"
any = 3.141592
단, Any 에 Double 할당했더라도 Double 변수에 직접적으로 할당해줄 순 없음 (명시적 형 변환 필요)
→ 모든 클래스 타입을 지칭하는 프로토콜
class SomeClass { }
var anyObject: AnyObject = SomeClass()
// Any Object 는 클래스의 인스턴스만 수용 가능
anyObject = 123.12 // 컴파일 오류 발생
→ '없음'을 의미하는 키워드 (다른 언어에선 통상적으로 null 이라고 칭함)
→ 멤버가 인덱스를 가진 리스트 형태의 컬렉션 타입
→ 여러 리터럴 문법을 활용할 수 있어서 선언 및 생성 표현 방법이 다양함
var integers: Array = Array()
var integers: Array = [Int]()
var integers: Array = []
var integers: [Int] = Array()
var integers: [Int] = [Int]()
var integers: [Int] = []
var integers = [Int]()
integers.append(1)
integers.append(50)
integers.append(100)
print(integers) // [1, 50, 100]
print(integers.contains(100)) // true
integers[0] = 30 // [30, 50, 100]
integers.remove(at: 0) // [50, 100]
integers.removeLast() // [50]
integers.removeAll() // []
print(integers.count) // 0
let immutableArray = [1, 2, 3] // 불변 Array
→ key 와 value 의 쌍으로 이루어진 컬렉션 타입
→ 여러 리터럴 문법을 활용할 수 있어서 선언 및 생성 표현 방법이 다양함
var dict: Dictionary = [String: Any]()
var dict: Dictionary = Dictionary()
var dict: [String: Any] = Dictionary()
var dict: [String: Any] = [String: Any]()
var dict: [String: Any] = [:]
var dict = [String: Any]()
// 키에 해당하는 값 할당
dict["someKey"] = "value"
dict["anotherKey"] = 100
print(dict) // ["someKey": "value", "anotherKey": 100]
// 키에 해당하는 값 변경
dict["someKey"] = "dictionary"
print(dict) // ["someKey": "dictionary", "anotherKey": 100]
// 키에 해당하는 값 제거
dict.removeValue(forKey: "anotherKey")
dict["someKey"] = nil
print(dict)
// 불변 Dict
let immutableDict: [String: String] = ["name": "H43RO", "gender": "male"]
// immutableDict["name"] = "김현준" 컴파일 오류 발생
→ 순서가 없고 각 멤버가 항상 유일한 것을 보장하는 컬렉션 타입
// 빈 Int Set 생성
var integerSet: Set = Set()
integerSet.insert(1)
integerSet.insert(100)
integerSet.insert(100)
integerSet.insert(100)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99)
print(integerSet) // [100, 99, 1]
print(integerSet.contains(1)) // true
integerSet.remove(100)
integerSet.removeFirst()
print(integerSet.count) // 1
// Set는 집합 연산에 매우 유용함
let setA: Set = [1, 2, 3, 4, 5]
let setB: Set = [3, 4, 5, 6, 7]
// 합집합
let union: Set = setA.union(setB)
print(union) // [2, 4, 5, 6, 7, 3, 1]
// 합집합 오름차순 정렬
let sortedUnion: [Int] = union.sorted()
print(sortedUnion) // [1, 2, 3, 4, 5, 6, 7]
// 교집합
let intersection: Set = setA.intersection(setB)
print(intersection) // [5, 3, 4]
// 차집합
let subtracting: Set = setA.subtracting(setB)
print(subtracting) // [2, 1]