固定
使用固定,通过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