AppStorage
是一款适用于 iOS 14 @AppStorage
属性包装器的直接替换品。
特点
- 与 SwiftUI 的
@AppStorage
属性包装器的 API 完全一致 - 完全兼容 iOS 13、macOS Catalina、watchOS 6、tvOS 13
- 当底层
UserDefaults
发生变化时,会自动更新 - 经过良好测试
用法
// iOS 14
@AppStorage("text") var text = "Default Text"
@AppStorage("magic_number", store: .customUserDefaults) var magicNumber = 42
// iOS 13
@AppStorageCompat("text") var text = "Default Text"
@AppStorageCompat("magic_number", store: .customUserDefaults) var magicNumber = 42
更完整的示例
import SwiftUI
import AppStorage
enum StringEnum: String, Identifiable {
case a, b, c
var id: String { rawValue }
}
enum IntEnum: Int, Identifiable {
case this, that, theOther
var id: Int { rawValue }
}
struct ContentView: View {
@AppStorageCompat("text", store: .standard) var text = "Default Text"
@AppStorageCompat("string_enum") var selectionString: StringEnum = .a
@AppStorageCompat("int_enum") var selectionInt: IntEnum = .this
var body: some View {
List {
Section(header: Text("Acts like a persistent @State")) {
TextField("Change me", text: $text)
TextField("Change me, too!", text: $text)
}
Section(header: Text("Change UserDefaults without property wrapper")) {
Button("Sneakily change a UserDefault") {
UserDefaults.standard.setValue("One more thing...", forKey: "text")
}
Button("Remove a UserDefault") {
UserDefaults.standard.setValue(nil, forKey: "text")
}
}
Section(header: Text("Enums with raw values")) {
Picker("Pick Me", selection: $selectionString) {
Text("a").tag(StringEnum.a)
Text("b").tag(StringEnum.b)
Text("c").tag(StringEnum.c)
}.pickerStyle(SegmentedPickerStyle())
Picker("Pick Me", selection: $selectionInt) {
Text("this").tag(IntEnum.this)
Text("that").tag(IntEnum.that)
Text("the other").tag(IntEnum.theOther)
}.pickerStyle(SegmentedPickerStyle())
}
}.listStyle(GroupedListStyle())
}
}

安装
Swift 包管理器
将包添加到您的 Package.swift 文件中
dependencies: [
.package(url: "https://github.com/xavierLowmiller/AppStorage.git", .upToNextMajor(from: "1.0.3"))
]
CocoaPods
将此库添加到您的Podfile文件
platform :ios, '13.0'
use_frameworks!
target 'MyApp' do
pod 'AppStorage', '~> 1.0.3'
end
Carthage
将以下行添加到您的Cartfile文件中
github "xavierLowmiller/AppStorage" ~> 1.0.3
手动
因为它只是一个单个文件,您可以直接下载并将其拖到您的项目中。