固定版本1.0.0

固定1.0.0

James Langdon维护。



固定1.0.0

  • 作者:
  • James Langdon

固定

Platforms

使用固定,通过Swift 4的Codable类型和本地文件存储快速保存常见的Swift对象。

工作原理

设置

简单地在Swift中定义一个对象(使用您的值类型!),并让它符合Stickable协定。为了充分利用Sticky,请确保您的对象也添加了Equatable协定。

注意:在Swift 4.1中,配合可以由您自动生成

import Sticky

struct Candy: Stickable {
    var productId: Int
    var name: String
    var rating: Rating
}

// Needs to conform to Equatable
extension Candy: Equatable {
    static func == (lhs: Candy, rhs: Candy) -> Bool {
        return
            lhs.productId == rhs.productId &&
            lhs.name == rhs.name &&
            lhs.rating == rhs.rating
    }
}

写入

一旦您的对象符合Stickable协定,您只需创建其实例并调用stick()方法来保存它。

var candyBar = Candy(productId: 1, name: "Snickers", rating: .four)
candyBar.stick()

读取

想要取出数据吗?

Candy.read()
//  [{productId: 1, name: "Snickers", rating: 4}]

插入

如果您在本地跟随,您还需要定义上面使用的 Rating 类型,并确保它也是 Codable。

enum Rating: Int {
    case one = 1
    case two
    case three
    case four
}

extension Rating: Codable {}

那么如果您想添加一个新糖果呢?

candyBar.name = "Milky Way"
candyBar.stick()

Candy.read()
// [
//  {productId: 1, name: "Snickers", rating: 4},
//  {productId: 1, name: "Milky Way", rating: 4}
// ]

更新

等等,我不想创建一个新的糖果,只想要更新名字...

没问题,只需创建一个 StickyKey

extension Candy: StickyKey {
    struct Key: Equatable {
        var productId: Int

        static func ==(lhs: Key, rhs: Key) -> Bool {
            return lhs.productId == rhs.productId
        }
    }

    var key: Candy.Key {
        return Candy.Key(productId: self.productId)
    }
}

candyBar.name = "Almond Joy"

candyBar.stickWithKey()

Candy.read()
// [
//  {productId: 1, name: "Almond Joy", rating: 4},
//  {productId: 1, name: "Milky Way", rating: 4}
// ]

删除

可能想要删除那个重复的 productId...

有多种方法可以实现这一点。首先,您可以简单地创建或使用 Milky Way 对象来取消粘性。

let milkyWay = Candy(productId: 1, name: "Milky Way", rating: .four)
milkyWay.unstick()

Candy.read()
// [{productId: 1, name: "Almond Joy", rating: 4}]

配置

此外,您首次初始化 Sticky(例如,从 AppDelegate)时,可以将其配置为启动时清理目录,从而给您一个干净的起点。

let stickyConfig = StickyConfiguration(
    preloadCache: false, 
    clearDirectory: true, 
    async: false, 
    logStyle: .verbose)

Sticky.configure(with: .custom(stickyConfig))

当然,您可以自己获取目录和移除 .json 文件。

print(Sticky.shared.configuration.localDirectory)
// /var/folders/63/hmdwgb3148v4_xzv_jff_ztr0000gn/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.stickyExample-D9C1FB9E-545E-459A-9B57-8191A9B10FC4/Documents/

安装

需求

  • iOS 10.0+ | macOS 10.12+ | tvOS 11.0+ | watchOS 4.0+
  • Xcode 9.0+

集成

CocoaPods (iOS 10+, OS X 10.12+)

您可以使用CocoaPods通过将其添加到您的Podfile中安装Sticky

platform :ios, '10.0'
use_frameworks!

target 'MyApp' do
    pod 'Sticky'
end