...
본문 바로가기

WWDC

WWDC 20 - What's new in Swift


  • 세션보면서 정리한 내용입니다. 해석이 잘못된 경우가 있을수있으니 발견하시면 댓글로 남겨주시면 감사하겠습니다🙏🏻

 

https://developer.apple.com/videos/play/wwdc2020/10170/ 

 

What's new in Swift - WWDC 2020 - Videos - Apple Developer

Join us for an update on Swift. Discover the latest advancements in runtime performance, along with improvements to the developer...

developer.apple.com

 

 

 


요약

  • 👍Swift런타임오버헤드를 비약적으로많이줄였다.
    • 오버헤드가존재하는이유는 다양한캐시와 정보들을 저장하기때문.
    • 이를체감하기위해서는 iOS14최소버전타깃으로정하라
  • 👍5.3부터 multiple trailing closure syntax가 가능하다
    • 이전에는 마지막클로저만 trailing이가능햇슴
  • 👍entry point를 이제는 @main으로 정한다.
  • 👍클로저에서 self를 이제는 캡처리스트에서 정의하여, self를 사용하지않아도된다.
  • 👍클로저에서 값타입인경우의 self는 이제는 더이상 사용하지않아도된다!
  • 👍do,catch 구문에서 에러는 case들을 이제는 catch구문으로받아올수있다.
  • Float16타입이 새로생겼다

 

 


Swift는 버전이올라갈수록 코드사이즈가 줄어들고있따

SwiftUI에서는 코드량이엄청줄었다.

Objective-c인경우 모델을 배열에담을경우, 모두 포인터를가지며 가리킨다.

swift는 struct는 값타입이므로, 포인터를통해서 접근하지않고 그대로 모델에저장하고,
string은 작은집합일경우도 모델에저장되고,

결국 배열에 꽉 안착하게된다.
즉, 메모리에서연속적으로저장하게된다.

같은 모델의경우
swift가 heap사용에있어서 더 적은메모리를 사용한다.


하지만, swift는 런타임오버헤드땓문에 많은 힙메모리를 사용한다.
왜냐하면 swift는 많은 캐쉬와 메모리를 start-up때 만들어낸다.
캐시는 프로토콜conformance, 다른type정보, objective-c와의 브릿지타입에 사용되는 데이터들을 저장한다.

모든 언어런타임에는 오버헤드가존재하지만, swift는 너무많다. 그래서 최적화할여지가있어보인다.

하지만..5.3부터는 1/3로줄었다………
이 장점을누리기위해서는 iOS 최소타겟을 14로해야한다.

이러한 메모리사용을줄이고, 오버헤드를줄임으로써,
swift는 더 low-level 수준에서 중요하게작용할수있다.

  • 즉, 더 낮은 low-level수준의 프레임워크를 만들기위해 swift가 사용될수있다.

Swift는 더 자세하게 에러를 나타낼수있는 진단이생겼다.
새로운전략을사용한다.

예를들어, 5.1에서는 아래와같이 일치하지않는 컴파일에러를나타낸다.

5.3에서는아래와같이더정확하게바꼇다


더궁금한점은 swift.doc에서볼수있다.


Code Completion

  • 코드작성시 더 정확하게 타입을나타내준다.

keyPath도 나타나게해준다.

최대 xcode11.5과비교하여 code completion이 15배나더빠르다

SwiftUI에서 엄청빨라졌따

들여쓰기도 엄청 잘된다.

이전에는 들여쓰기가이랬다면


더정확하게, 들여쓰기가된다

 

 

 


Swift 스탠다드 라이브러리 변화

아래와같이변화가생겼는데, 몇개만보자


여기서확인할수있다.

 

👍Multiple Trailing closure syntax

 

기존에는 여러개있을경우 이렇게작성해야했다.
또는 마지막closure만 trailing할수있었다.


이렇게바꼈다.
이제중간클로저도 trailing클로저를 적용할수있따.


가능!


5.3 - KeyPath expression as Funcctions

아래 메서드의 클로저를 keypath를이용했다.



하지만, 클로저는 이제 자동적으로 keypath를 사용할수있또록해준다.


@main

  • 모든프로그램들은 실행되어지기위해서는 entry point를 지정해야한다
  • 이러한과정에서 boillerplate 코드가추가된다.

swift.1.0에서부터 @UIApplicationMain 를 AppDelegate에서 사용할수있었다.
컴파일러에게 실행하도록 main.swift를 암시적으로 생성하게해준다.


이제는 @main을사용하면 간단히, 컴파일러가 대신 main.swift를 암시적으로만들어준다.

  • command linetool, application, swiftUI 에서 사용가능하다.

 

 

👍Increased Availability of implicit self in closures

 

이전에는 탈출클로저에서는 캡처하기위해 self를 명시적으로계속써야했다.

하지만?! siwft.5.3에서는 self를캡쳐하여 self를 사용하지않아도되게했다!

하지만, 떄로는 값타입인데, self를 붙이는게 영별로일떄가잇다.
( 값타입이니, reference cycle을 만들지않으니까 )

이제는 struct,enum타입인경우에는!! self를 작성하지않아도된다!

 

 

Multiple-pattern catch caluses

  • error가 enum으로 여러타입이니까, catch안에서 또 switch-case를 작성해싿.

하지만, 이제는 catch구문에서도 잡을수있게됐따.

protocol을 이제 Enum에서도 적용할수있다.
( 아래와같을때만, )

 

 

DSL Enhancements

  • SwiftUI의 declartive syntax를 키워줄.
  • Builder 클로저를 포함한다.

이전에는 @SceneBuilder를 붙였는데이제는 안붙여도된다.


SwiftUI에 엄청많은걸넣었다.

Swift의 새로운기능

Float16

Apple Archive

OSLog

  • 최적화아 굉장히빨라졌따.다양한 포멧형식을제공한다.

SwiftPagkageManager

오픈소스

 



'WWDC' 카테고리의 다른 글

WWDC 18 - High Performance Auto Layout  (0) 2021.06.23
WWDC 16 - Understanding Swift Performance  (0) 2021.06.22
WWDC 19 - Modern Swift API Design  (0) 2021.06.22
WWDC 19 - Optimizing App Launch  (0) 2021.06.22
WWDC 19 - Combine In Practice  (0) 2021.06.19