一个符合语言习惯且可配置的 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 文件。