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 |
Tags
- RxCocoa
- Human interface guide
- swift documentation
- swiftUI
- combine
- ios
- clean architecture
- 클린 코드
- Observable
- SWIFT
- map
- rxswift
- UITextView
- UICollectionView
- Clean Code
- 스위프트
- ribs
- Refactoring
- MVVM
- 애니메이션
- tableView
- HIG
- collectionview
- uiscrollview
- Xcode
- 리팩토링
- 리펙터링
- Protocol
- 리펙토링
- uitableview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Swift] Swift 5.7 변경된 점 (if let 옵셔널 바인딩, closure 리턴 키워드 생략, 문자열 regex) 본문
iOS 응용 (swift)
[iOS - Swift] Swift 5.7 변경된 점 (if let 옵셔널 바인딩, closure 리턴 키워드 생략, 문자열 regex)
jake-kim 2022. 11. 23. 10:37if let 옵셔널 바인딩 개선
- '=' 기호를 사용하지 않고 옵셔널 바인딩 가능
// 이전
if let data = data {
print(data)
}
// swift 5.7
if let date {
print(data)
}
Type Checking 빌드 속도 개선
closure 리턴 키워드 생략
- 단일 표현식에서만 가능했던 closure에서 리턴 키워드 생략이 여러줄이 있는 클로저에서도 적용 가능
// 이전
let newArr = arr.map { val -> String in
let ret = $0 + 2
String(ret)
}
// Swift5.7
let arr = [1,2,3]
let newArr = arr.map {
let ret = $0 + 2
String(ret) // swift5.7부터 가능
}
제네릭 타입에도 default type 지정이 가능
struct Box<F: Flags> {
init(flags: F = DefaultFlags()) { ... }
}
Box() // F는 DefaultFlags 타입
Box(flags: CustomFlags())
추가된 문자열 처리 함수
- ranges(of:)
- replacing(_:with:)
- trimmingPrefix(_:)
let message = "the cat sat on the mat"
print(message.ranges(of: "at"))
print(message.replacing("cat", with: "dog")) // the dog sat on the mat
print(message.trimmingPrefix("the ")) // cat sat on the mat
- 정규식 입력도 가능
print(message.ranges(of: /[a-z]at/))
print(message.replacing(/[a-m]at/, with: "dog"))
print(message.trimmingPrefix(/The/.ignoresCase()))
- Swift에서 정규식 관련 기능을 추가한 이유
- 문자열 처리 시 매우 편리하게 처리가 가능
ex) 주어진 문자열 중 이름과 나이만 가져오고 싶은 경우
let greeting1 = "My name is Taylor and I'm 26 years old."
let search1 = /My name is (.+?) and I'm (\d+) years old./
if let result = try? search1.wholeMatch(in: greeting1) {
print("Name: \(result.1)") // Name: Taylor
print("Age: \(result.2)") // Age: 26
}
프로토콜을 타입처럼 사용 가능
- 프로토콜을 타입처럼 사용가능하여, any Eqatable 타입으로 선언한 후 값 입력 가능
let firstName: any Equatable = "Kim"
let lastName: any Equatable = "Jake"
print(lastName as! String == "Jake") // true
print(lastName as! String == "Paul") // false
- 기존에는 static func ==(lhs: Self, rhs: Self) -> Bool을 정의하여 사용했지만 확장성이 좋지 않아서, 프로토콜도 타입처럼 사용가능하도록 변경
* 이 밖의 변경 사항: https://www.swift.org/blog/swift-5.7-released/
* 참고
https://github.com/apple/swift-evolution/blob/main/proposals/0346-light-weight-same-type-syntax.md
https://developer.apple.com/videos/play/wwdc2022/110354/
https://www.swift.org/blog/swift-5.7-released/
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - Swift] CALayer, mask 개념 (UIView와 CALayer의 차이, 뷰 자르기) (0) | 2022.11.28 |
---|---|
[iOS - Swift] SelfSizingTableView, SelfSizingCollectionView 구현 방법 (Dynamic Size) (0) | 2022.11.26 |
[iOS - Swift] RxSwift의 에러 처리 시 주의사항 (do(onError:), single, catch) (0) | 2022.11.22 |
[iOS - Swift] KVC, KeyPath, DynamicMemberLookup 개념 (0) | 2022.11.19 |
[iOS - Swift] 인앱 결제 StoreKit 개념 목차 (0) | 2022.11.18 |
Comments