Skip to content

Latest commit

ย 

History

History
109 lines (71 loc) ยท 3.14 KB

What-s-New-in-Swift.md

File metadata and controls

109 lines (71 loc) ยท 3.14 KB

What's New in Swift

Session 402

๐Ÿ”— What's New in Swift - WWDC 2019 - Videos - Apple Developer

APIs

  • Shared Swift Runtime for Apps
  • Binary Frameworks
  • Apple Swift-Only Frameworks
  • Package Manager in Xcode
  • More API Expressibility
  • Library Evolution

ABI and Module Stability

What is ABI?

ABI = Application Binary Interface

์ปดํŒŒ์ผ ์ฝ”๋“œ๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉ ํ•  ๊ฒƒ ์ธ์ง€์— ๋Œ€ํ•œ ๊ทœ์น™

exec : Swift๋กœ ์ง  ํ”„๋กœ๊ทธ๋žจ

framework : Swift๋กœ ์ง  framework

์ด ๋ชจ๋“ ๊ฒŒ ๊ฐ™์ด ์ปดํŒŒ์ผ ๋˜๊ณ  running process์—์„œ ์ž‘๋™ํ•œ๋‹ค

exec ๋Š” framework์˜ API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋Ÿฐํƒ€์ž„์— ์„œ๋กœ ์†Œํ†ตํ•œ๋‹ค. ์ด ๋‘๊ฐœ๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์ปดํŒŒ์ผ ๋˜์ง€๋งŒ ์ปดํŒŒ์ผ ์ฝ”๋“œ๋Š” ๊ฐ™์ด ์ž‘๋™ํ•ด์•ผํ•œ๋‹ค. ABI stability ์ „์—๋Š”, ๊ฐ™์€ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ๋นŒ๋“œ ๋˜์–ด์•ผ๋งŒ ABI๊ฐ€ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ Swift5 ์—์„œ๋Š” ์ด ๋‘๊ฐœ๊ฐ€ ๊ฐ™์€ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ๋นŒ๋“œ ๋  ํ•„์š”๊ฐ€ ์—†๋‹ค.

What is Module Stability?

  • ์ปดํŒŒ์ผ ํƒ€์ž„ ๊ฐœ๋…
  • Module: Swift ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ทธ ์•ˆ์˜ ๋ชจ๋“  API๋ฅผ ์‚ฌ์šฉํ• ๋‹ค๋ฉด Module์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ณต์œ ๋˜๋Š” namespace๊ฐ€ ์žˆ๋‹ค.
  • Module file: ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ, ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ชจ๋“  API๋ฅผ ๋‚˜์—ดํ•ด manifest๋ฅผ ๋งŒ๋“ ๋‹ค. Swift Module file์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” manifest
  • Module Interface file: Swift 5.1์—์„œ ๋ณด์ถฉ์ ์ธ manifest๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ stable interface๋ฅผ ์ œ๊ณต ํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”

Module + ABI stability = Binary frameworks

Performance

๋Ÿฐ์น˜ ํƒ€์ž„, ์ฝ”๋“œ ์‚ฌ์ด์ฆˆ, Obj-C Swift ์ฝ”๋“œ bridging(ex. NSDictionary to Dictionay) ๋‹ค ๊ฐ์†Œํ–ˆ๋‹ค~

Language and Standard Library

Swift Evolution

single expression ์ผ๋•Œ return ์ƒ๋žต ๊ฐ€๋Šฅ

Struct ๋””ํดํŠธ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ์ดˆ๊ธฐํ™” ์‹œ์— ๋ช…์‹œ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•ด์ค€๋‹ค

๋ฒกํ„ฐ ์ขŒํ‘œ์— ๋Œ€ํ•œ ํƒ€์ž…์ด ์ƒ๊ฒผ๋‹ค

New Design for String Interpolation

Reasons to Abstract a Return Type

Limitations of Returning a Protocol Type

Opaque Result Type

Property Wrapper Types

    @propertyWrapperstruct 
    UserDefault<T> {
    	let key: String
    	let defaultValue: T
    
    	init(_ key: String, defaultValue: T) {
    		...
    		UserDefaults.standard.register(defaults: [key: defaultValue])  
    	}
    
    	var value: T {
    		get {
    			return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
    		}
    		set {
    			UserDefaults.standard.set(newValue, forKey: key)
    		}
    	}
    }
    // Using UserDefault property wrapper to declare and access properties
     @UserDefault("USES_TOUCH_ID", defaultValue: false)
     static var usesTouchID: Bool
    
     @UserDefault("LOGGED_IN", defaultValue: false)
     static var isLoggedIn: Bool

DSLs(Domain Specific Languages)

SwiftUIํŒŒํ‹ฐ