[Daily Swift] 2일차

EunJi·2023년 9월 12일
0

Swift

목록 보기
3/6

Collection Type

종류: Array, Dictionary, Set

Array

  • 순서 0 (index 0)
  • let을 사용하여 선언할 경우, array 변경 불가.
# 생성
var array: Array<Int> = Array<Int>()
var array2: Array<Int> = [Int]()
var array3: [Int] = []
# 추가
array.append(1)

# 제거
array.remove(at: 0) // index = 0 요소 제거
array.removeLast() // 마지막 요소 제거
array.removeAll() // 모든 요소 제거
# 멤버 소유 여부
array.contains(1) // true
array.contains(100) // false

# 개수
array.count

Dictionary

  • {Key, Value}
# 생성
var dictionary: Dictionary<String, Any> = [String: Any]()
var dictionary2: [String: Any] = [:]
# 추가
dictionary["example1"] = "EXAMPLE"
dictionary["example2"] = 1

# 제거
dictionary.removeValue(forKey: "example1")
dictionary["example2"] = nil
let initializedDictionary: [String: String] = ["name": "eunji", "gender": "female"]
let someValue: String = initializedDictionary["name"] // ERROR!
  • Dictionary는 key는 존재, value는 존재X 가능.
  • 만약 값이 없을 경우 let으로 정의된 상수에 값을 넣어줄 수 없음.
  • 그런 불확실성 때문에 오류 발생.

Set

  • 순서 X
  • 요소가 유일함. (중복 X)
  • 집합이라고 생각
# 생성
var set: Set<Int> = Set<Int>()
// 추가적인 축약 문법 존재 X
# 추가
set.insert(1)
set.insert(1)
// 아무리 1을 여러번 넣어줘도 1은 1개만 존재

# 제거
set.remove(1)
set.removeFirst()
# 요소 유무 확인
set.contains(1) // true
set.contains(100) // false

# 개수
set.count
# 집합 연산
let setA: Set<Int> = [1, 2, 3]
let setB: Set<Int> = [3, 4, 5]

let union: Set<Int> = setA.union(setB) // 합집합
let sortedUnion: [Int] = union.sorted() // 집합 정렬
let intersection: Set<Int> = setA.intersection(setB) // 교집합
let subtracting: Set<Int> = setA.subtracting(setB) // 차집합

Enum

정의

enum Weekday {
	case mon
    case tue
    case wed
    case thu, fri, sat, sun
}

var day1 = Weekday.mon
var day2: Weekday = .tue

rawValue

  • 숫자: 자동으로 1씩 증가
  • 문자열: case의 이름 그대로 가져옴.
enum Fruit: Int {
	case apple = 0
    case grape = 1
    case orange
}

enum School: String {
	case elementary = "초등"
    case middle = "중등"
    case high = "고등"
    case university
}

print(Fruit.orange.rawValue) // 2
print(School.university.rawValue) // university
  • rawValue는 Optional
    rawValue가 0인 경우가 없을 수 있으므로 ?를 꼭 붙여줘야 에러가 안 남.
let apple: Fruit = Fruit(rawValue: 0) // ERROR
let apple: Fruit? = Fruit(rawValue: 0) // OK

if let orange: Fruit = Fruit(rawValue: 5) {
	print(" 존재!")
} else {
	print("존재하지 않음.")
}
  • 함수
enum Family SchoolDetail {
	case elementary(name: String)
    case middle(name: String)
    case high(name: String)
}

let yourMiddleSchool = SchoolDetail.middle(name: "경원중")
print(yourMiddleschool) // 경원중
  • method 추가
enum Family SchoolDetail {
	case elementary(name: String)
    case middle(name: String)
    case high(name: String)
    
    func  getName() -> String {
    	switch_self {
       	case .elementary(let name):
        	return name
        case let .middle(name):
        	return name
        case .high(let name):
        	return name
        }
    }
}

let yourMiddleSchool = SchoolDetail.middle(name: "경원중")
print(yourMiddleschool.getName()) // 경원중

Switch-Case 문

  • 모든 case를 정의해주지 않은 경우, default를 꼭 써줘야함!
switch day {
case .mon, .tue, .wed, .thu:
	print("시간 안 가")
case .fri:
	print("불금!")
default:
	print("주말")
}

참고

profile
말하는 감자

0개의 댓글