Session 402
๐ What's New in Swift - WWDC 2019 - Videos - Apple Developer
- Shared Swift Runtime for Apps
- Binary Frameworks
- Apple Swift-Only Frameworks
- Package Manager in Xcode
- More API Expressibility
- Library Evolution
ABI = Application Binary Interface
์ปดํ์ผ ์ฝ๋๊ฐ ๋ฐํ์์ ์ด๋ป๊ฒ ์ํธ์์ฉ ํ ๊ฒ ์ธ์ง์ ๋ํ ๊ท์น
exec : Swift๋ก ์ง ํ๋ก๊ทธ๋จ
framework : Swift๋ก ์ง framework
์ด ๋ชจ๋ ๊ฒ ๊ฐ์ด ์ปดํ์ผ ๋๊ณ running process์์ ์๋ํ๋ค
exec ๋ framework์ API๋ฅผ ์ฌ์ฉํ๊ณ , ๋ฐํ์์ ์๋ก ์ํตํ๋ค. ์ด ๋๊ฐ๋ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์ปดํ์ผ ๋์ง๋ง ์ปดํ์ผ ์ฝ๋๋ ๊ฐ์ด ์๋ํด์ผํ๋ค. ABI stability ์ ์๋, ๊ฐ์ ์ปดํ์ผ๋ฌ๋ก ๋น๋ ๋์ด์ผ๋ง ABI๊ฐ ํธํ ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง Swift5 ์์๋ ์ด ๋๊ฐ๊ฐ ๊ฐ์ ์ปดํ์ผ๋ฌ์์ ๋น๋ ๋ ํ์๊ฐ ์๋ค.
- ์ปดํ์ผ ํ์ ๊ฐ๋
- 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
๋ฐ์น ํ์, ์ฝ๋ ์ฌ์ด์ฆ, Obj-C Swift ์ฝ๋ bridging(ex. NSDictionary to Dictionay) ๋ค ๊ฐ์ํ๋ค~
single expression ์ผ๋ return ์๋ต ๊ฐ๋ฅ
Struct ๋ํดํธ ๊ฐ์ด ์๋ค๋ฉด ์ด๊ธฐํ ์์ ๋ช ์ ํด์ฃผ์ง ์์๋ ๋๋ค ์ปดํ์ผ๋ฌ๊ฐ ํด์ค๋ค
๋ฒกํฐ ์ขํ์ ๋ํ ํ์ ์ด ์๊ฒผ๋ค
@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
SwiftUIํํฐ