Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- combine
- swiftUI
- Clean Code
- Observable
- UICollectionView
- uitableview
- tableView
- 애니메이션
- 리펙터링
- Protocol
- map
- ribs
- HIG
- collectionview
- Xcode
- SWIFT
- uiscrollview
- 리펙토링
- RxCocoa
- rxswift
- 클린 코드
- ios
- swift documentation
- clean architecture
- Human interface guide
- MVVM
- Refactoring
- 스위프트
- 리팩토링
- UITextView
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] Optional 타입에 map 사용하기(Synthetic Sugar) 본문
* Synthetic Sugar: 결과는 같지만, 코드를 조금 더 단순하게 표현하는 것
Optional 타입에 map 사용하기
- 보통 map 함수를 배열과 같은곳에 원소를 하나씩 돌면서 변화를 줄 때 사용
let items = [1,2,3,4,5]
let itemsWithPlusOne = items.map { $0 + 1 }
- 하지만 Optional 타입에도 map을 사용이 가능
- Swift 코드를 보면 Optional에 map 함수가 정의
- Optional인 타입의 메소드이며, 이 map을 사용하면 Optional을 벗겨낸 값을 map의 클로저로 전달한 인수로 들어가는 것
@frozen public enum Optional<Wrapped> : ExpressibleByNilLiteral {
@inlinable public func map<U>(_ transform: (Wrapped) throws -> U) rethrows -> U?
}
map으로 Optional 다루기 예제
- Person이라는 class타입 모델이 있고, person을 업데이트 하는 코드가 아래처럼 있을때, updatePerson해야하는 상황
- (person은 Optional타입)
- updatePerson에서 person은 Optional이 아니어야 하므로 사용하는쪽에서는 if let으로 person을 optional binding하여 사용
class ViewController: UIViewController {
var person: Person? = Person(name: "jake", age: 20)
func updatePerson(person: Person) {
let currentAge = person.age
person.age = currentAge + 1
}
override func viewDidLoad() {
super.viewDidLoad()
if let person {
updatePerson(person: person)
}
}
}
- map을 사용하면 Optional binding없이 한 줄로 간편하게 처리가 가능
- 여기에 map을 사용할 때 keyPath까지 사용하여 대괄호 없이 아래처럼 간결하게 표현이 가능
person.map(updatePerson(person:))
- 만약 person이 nil이면 updatePerson은 실행되지 않기 때문에 if let person {...}과 똑같은 기능
'iOS 응용 (swift)' 카테고리의 다른 글
Comments