브래의 슬기로운 코딩 생활
9 - 옵셔널 체이닝(Optional Chaining), Generic, Array 본문
옵셔널 체이닝 (Optional Chaining)
옵셔널 체이닝 (Optional Chaining)
옵셔널로 선언된 변수의 맴버에 안전하게 접근하기 위한 방법 (?)
Optional Chaining 예
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name
= name
self.age
= age
}
}
let kim: Person
= Person(name: "Kim", age: 20
)
print(kim.age)
let han: Person?
= Person(name: "Han", age: 25
)
print(han.age)
//print(han!.age)
// print(han?.age) //Optional(25), 옵셔널 체이닝
// print((han?.age)!)
// if let hanAge = han?.age {
// print(hanAge)
// } else {
// print("nil")
// }
옵셔널 체이닝을 쓰는 이유
옵셔널 타입으로 정의된 값이 프로퍼티나 메서드를 가지고 있을 때, 다중 if를 쓰지 않고 간결하게 코드를 작성하기 위해
옵셔널 타입의 데이터는 연산이 불가능
- 연산을 하기 위해서는 옵셔널을 해제 해야 하는데, 많은 양의 옵셔널 타입의 데이터의 경우 다시 한번 옵셔널 타입으로 변경을 하면서 해제를 시켜줌
Generic <>
기능은 같고 매개변수형만 다른 함수는 제네릭 함수로 구현
func myPrint<T>(a: T, b: T) {
print(b,a)
}
myPrint(a:1,b:2)
myPrint(a:2.5,b:3.5)
swift의 Array도 generic 구조체
var x : [Int] = [] //빈 배열
var y = [Int]()
var z : Array<Int> = []
var a : [Int] = [1,2,3,4]
var b : Array<Int> = [1,2,3,4]
var c : Array<Double> = [1.2,2.3,3.5,4.1]
Array
Array
연결리스트(linked list)
https://developer.apple.com/documentation/swift/array
빈 배열(empty array)
var number : [Int] = []
var odd = [Int]()
var even : Array<Int> = Array()
print(number) //[]
빈 배열(empty array) 주의 사항
let number : [Int] = []
//빈 배열을 let으로 만들 수는 있지만 초기값에서 변경 불가이니 배열의 의미 없음
var odd = [Int]()
var even : Array<Int> = Array()
print(number)
number.append(100) //let으로 선언한 불변형 배열이라 추가 불가능
//error: cannot use mutating member on immutable value: 'number' is a 'let' constant
odd.append(1)
even.append(2)
가변형(mutable)
- var animal = ["dog", "cat","cow"]
불변형 (immutable)
- 초기화 후 변경 불가
- let animal1 = ["dog", "cat","cow"]
var number : [Int] = []
//number[0]=1 //crash, 방을 만든 후 사용하라!
number.append(1)
print(number)
number[0]=10
print(number)
Array(repeating:count:)
특정값(repeating)으로 원하는 개수(count)만큼 초기화
https://developer.apple.com/documentation/swift/array
Array는 구조체이므로 값 타입
Array 요소의 최댓값 최솟값 :max(), min()
'2 - 겨울방학 > Swift 복습' 카테고리의 다른 글
11 - Autolayout (0) | 2023.12.31 |
---|---|
10 - Xcode 사용법 (BMI 판정 앱) (0) | 2023.12.30 |
8 - extension, Swift 접근 제어 (access control, access modifier), 프로토콜(protocol)과 Delegate, 열거형 (enum) (0) | 2023.12.28 |
7 - 클래스 (class) (0) | 2023.12.28 |
6 - 1급 객체(first class object), 1급 시민(first class citizen), 클로저(Closure) (0) | 2023.12.28 |