SwiftFSRS

一个符合语言习惯且可配置的 Swift 实现,实现了 FSRS 间隔重复算法

安装

将以下内容添加到你的 Package.swift 文件

dependencies: [
    .package(url: "https://github.com/4rays/swift-fsrs")
]

用法

调度器

算法的核心是 Scheduler 协议。它接收一个卡片和一个复习,并返回一个新的卡片和复习日志对象。

该库开箱即用地附带一个短期和一个长期调度器。 当你想在一天内支持同一卡片的多次复习时,请使用短期调度器。 否则使用长期调度器。

以下是如何创建你自己的调度器

import SwiftFSRS

struct CustomScheduler: Scheduler {
  func schedule(
    card: Card,
    algorithm: FSRSAlgorithm,
    reviewRating: ReviewRating,
    reviewTime: Date
  ) -> CardReview {
    // Implement your custom algorithm here
  }
}

算法

该库开箱即用地实现了 FSRS 算法的 v5 版本。 它也支持自定义实现。

import SwiftFSRS

let customAlgorithm = FSRSAlgorithm(
  decay: -0.5,
  factor: 19 / 81,
  requestRetention: 0.9,
  maximumInterval: 36500,
  parameters: [/* ... */]
)

scheduler.schedule(
  card: card,
  algorithm: customAlgorithm,
  reviewRating: .good,
  reviewTime: Date()
)

安排复习

要为一个给定的卡片安排复习

import SwiftFSRS

let scheduler = LongTermScheduler()
let card = Card()

let review = scheduler.schedule(
  card: card,
  algorithm: .v5,
  reviewRating: .good, // or .easy, .hard, .again
  reviewTime: Date()
)

print(review.card)
print(review.log)

卡片没有任何内容属性,而是作为你自己的类型的属性。

import SwiftFSRS

struct MyFlashCard {
  let question: String
  let answer: String
  let fsrsCard: Card
}

许可证

SwiftFSRS 在 MIT 许可证下可用。 有关更多信息,请参阅 LICENSE 文件。