강의 영상: https://youtube.com/playlist?list=PLz8NH7YHUj_ZmlgcSETF51Z9GSSU6Uioy
컬렉션 타입 - set
배열과 다르게 순서가 중요하지 않고, 중복되지 않는 유일한 값들로 이루어져 있다.
let numbers: Set<Int> = [1, 2, 3, 4]
// {2, 3, 4, 1}
set에 사용하는 메소드: union(), sorted(), intersection(), substracting()
let setA: Set<Int> = [1, 2, 3]
let setB: Set<Int> = [3, 4, 5]
let union: Set<Int> = setA.union(setB)
// {3, 5, 1, 4, 2} : 두 집합의 합집합이 순서 상관 없이 나열되며, 중복되는 값은 한번만 표시된다.
let sortedUnion: [Int] = union.sorted()
// [1, 2, 3, 4, 5] : union의 값들을 순서대로 정렬하여 배열로 반환한다.
let intersection: Set<Int> = setA.intersection(setB)
// {3} : 교집합을 set로 반환.
let substacting: Set<Int> = setA.substracting(setB)
// {1,4, 5, 2} : 차집합을 set로 반환.
Optional
- 뜻: 값이 있을 수도, 없을 수도 있다.
- 필요한 이유: nil의 가능성을 명시적으로 표현해준다.
- nil 가능성을 문서화하지 않고 코드만으로 표현 가능하다 ⇒ 문서/주석 작성 시간 절약
- 전달받은 값이 옵셔널이 아니라면 nil 체크를 하지 않더라도 안심하고 사용할 수 있다. ⇒ 효율적이고 안전한 코딩
- 표현: ! / ?
- 옵셔널이 아닌 자료형에는 nil을 지정할 수 없다.
func funcWithOpt(someOptionalParam: Int?) {
//...
}
func funcWithoutOpt(someParam: Int) {
//..
}
funcWithOpt(someOptionalParam: nil)
funcWithoutOpt(someParam: nil) // 컴파일 에러
! : 암시적 추출 옵셔널
//기존 변수처럼 사용 가능
optionalValue = optionalValue + 1
//nil 할당 가능
optionalValue = nil
//잘못된 접근으로 인한 런타임 오류 발생 가능
//변수에 nil을 지정했을 경우, 값을 더하면 오류 발생
optionalValue = optionalValue + 1
?
//nil 할당 가능
optionalValue = nil
//기존 변수처럼 사용 불가: 옵셔널과 일반 값은 다른 타입이므로 연산할 수 없다.
optionalValue = optionalValue + 1
Optional Binding
옵셔널의 값을 꺼내 오는 방법 중 하나로, nil 체크를 하고 안전한 값을 추출할 수 있다.
if-let 구문 사용
func printName( name:String) {
print(name)
}
var myName: String! = nil
if let name: String = myName {
printName(name)
} else {
print("myName == nil")
}
printName(name)
/* name 상수는 if-let 구문 내에서만 사용할 수 있다.
상수 사용범위를 벗어났기 때문에 컴파일 오류가 발생한다. */
여러 옵셔널 타입을 바인딩하기
var myName: String? = "song"
var yourName: String? = nil
if let name = myName, let friend = yourName {
print("\(name) and \(friend)")
}
//쉼표를 사용해서 여러 옵셔널 타입을 바인딩 할 수 있다.
// yourName이 nil 이기 떄문에 실행되지 않는다.
yourName = "ko"
//yourName에 값을 할당한 뒤 실행하면 된다.
if let name = myName, let friend = yourName {
print("\(name) and \(friend)")
}
//song and ko
Force Unwrapping
옵셔널의 값을 강제로 추출한다.
func printName( name:String) {
print(name)
}
var myName: String? = "ko"
printName(myName!) //ko!
//옵셔널에 !를 붙여 호출하면 값을 강제로 추출한다.
myName = nil
print(myname!)
//강제추출시 값이 없으므로 런타임 오류가 발생한다.
var yourName: String! = nil
printName(yourName)
//nil값이 전달되기 때문에 런타임 오류가 발생한다.
'Group Study (2021-2022) > iOS' 카테고리의 다른 글
[IOS] 6주차 스터디 - Alamofire 통신 (0) | 2021.11.15 |
---|---|
[Swift] 5주차 스터디 - Animation, Lottie (0) | 2021.11.08 |
[iOS] 4주차 스터디 - TableView, CollectionView (1) | 2021.11.01 |
[iOS]3주차 - navigation, modal, controller (0) | 2021.10.23 |
[iOS] 2주차 스터디 - IBOutlet + IBAction, Tabbar, Autolayout (1) | 2021.10.11 |