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
- Observable
- collectionview
- UITextView
- tableView
- Clean Code
- 클린 코드
- clean architecture
- Human interface guide
- 애니메이션
- RxCocoa
- swift documentation
- Protocol
- UICollectionView
- 리펙토링
- 스위프트
- rxswift
- ios
- HIG
- 리펙터링
- SWIFT
- Refactoring
- MVVM
- combine
- Xcode
- 리팩토링
- ribs
- uitableview
- map
- swiftUI
- uiscrollview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 1. swift 5.8 정리 - implicit self, magic file name, collection downcast 본문
iOS 응용 (swift)
[iOS - swift] 1. swift 5.8 정리 - implicit self, magic file name, collection downcast
jake-kim 2023. 4. 9. 01:311. swift 5.8 정리 - implicit self, magic file name, collection downcast <
2. swift 5.8 정리 - optional generic, lazy var, @backDeployed
Swift5.8 Release
- 2023년 3월 30일 출시
- Xcode 14.3부터 사용 가능
implicit self
- SE-0365
- weak self 캡쳐한 클로저 내부에서 guard let self else { return } 한번만 선언하면 self 생략 가능
- swift5.7에서는 아래처럼 에러가 발생하지만 swift5.8에서는 가능
class MyClass {
let value = 1
init() {
someFunc { [weak self] in
guard let self else { return }
print(value) // error: reference to property 'value' in closure requires explicit use of 'self' to make capture semantics explicit
}
}
func someFunc(completion: @escaping () -> ()) {
print("test")
}
}
- nested closure에서는 안되는것을 주의
someFunc { [weak self] in
guard let self else { return }
print(value)
someFunc2 {
print(value) // error!
}
}
magic file name
- SE-0274
- #file, #filePath 경로 변경
- swift5.7에서는 #file을 입력해도 #filePath와 동일하게 전체 경로를 보여주었지만, swift5.8부터는 {Module}/{file} 정보만 획득이 가능
- 단, Xcode의 Build Settings > Other Swift Flags에 특정 값 추가가 필요 -Xfrontend -enable-experimental-concise-pound-file
xcode > Target > Build Settings > Other Swift Flags에 추가
- -Xfrontend -enable-experimental-concise-pound-file
fn1()
fn2()
func fn1(file: String = #filePath) {
print(file) // /Users/jake/Desktop/Ex5_8/Ex5_8/ViewController.swift
}
func fn2(file: String = #file) {
print(file) // Ex5_8/ViewController.swift
}
Collection Downcast
- Parent 타입의 인스턴스를 child 타입으로 캐스팅하는 다운캐스팅이 collection 타입도 사용이 가능
- swift5.7에서는 collection 타입 캐스팅이 아래처럼 불가능했지만 swift5.8에서는 가능
// 참고: https://www.hackingwithswift.com/articles/256/whats-new-in-swift-5-8
class Pet { }
class Dog: Pet {
func bark() { print("Woof!") }
}
func bark(using pets: [Pet]) {
switch pets {
case let pets as [Dog]: // error: collection downcast in cast pattern is not implemented; use an explicit downcast to '[Dog]' instead
for pet in pets {
pet.bark()
}
default:
print("No barking today.")
}
}
* 이밖의 Swift5.8의 변경 사항들은 swift evolution 참고
* 참고
https://github.com/apple/swift-evolution/blob/main/proposals/0274-magic-file.md
https://github.com/apple/swift-evolution/blob/main/proposals/0365-implicit-self-weak-capture.md
https://www.hackingwithswift.com/articles/256/whats-new-in-swift-5-8
'iOS 응용 (swift)' 카테고리의 다른 글
Comments