AppStorage 1.0.4

AppStorage 1.0.4

Xavier Lowmiller 维护。




AppStorage

是一款适用于 iOS 14 @AppStorage 属性包装器的直接替换品。

Build Status CocoaPods Compatible Carthage Compatible Platform

特点

  • 与 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

手动

因为它只是一个单个文件,您可以直接下载并将其拖到您的项目中。