用于访问 德累斯顿学生服务中心 (Studentenwerk Dresden) 提供的一些膳食相关数据的 Swift 库。
let meals = try await Meal.for(canteen: .alteMensa, on: Date())
for meal in meals {
print(meal.name)
}
let canteens = try await Canteen.all()
for canteen in canteens {
print(canteen.name)
}
同时提供基于完成块 (completion block) 的 API 和基于 Combine 的 API。
与卡服务进行交互,获取您的 Emeal 卡的相关数据。您需要注册自动充值 (Autoload) 才能获取必要的身份验证信息。
let cardservice = try await Cardservice.login(username: "1234567890", password: "hunter2")
let carddata = try await cardservice.carddata()
print(carddata)
let ninetyDaysAgo = Date().addingTimeInterval(-60 * 60 * 24 * 90)
let transactions = try await cardservice.transactions(begin: ninetyDaysAgo)
print(transactions)
如果您的设备支持,EmealKit 还可以通过 NFC 扫描 Emeal 卡。只需创建一个 Emeal
对象,遵循 EmealDelegate
协议,并调用 beginNFCSession
方法即可。
class YourEmealHandler: EmealDelegate {
let emeal: Emeal
init() {
let strings = LocalizedEmealStrings(/*...*/)
emeal = Emeal(localizedStrings: strings)
emeal.delegate = self
// Call this to start the NFC session.
emeal.beginNFCSession()
}
func readData(currentBalance: Double, lastTransaction: Double) {
// Gets called on a successful scan.
}
func invalidate(with error: Error) {
// Called on errors.
}
}
如果您在 SwiftUI 视图中使用 ObservableEmeal
,操作会更简单。代码可能如下所示。
struct MyView: View {
@StateObject private var emeal = ObservableEmeal(localizedStrings: .init(/* ... */))
var body: some View {
VStack {
Text("Balance: \(emeal.currentBalance ?? 0.0)")
Text("Last Transaction: \(emeal.lastTransaction ?? 0.0)")
if let error = emeal.error {
Text(error.localizedDescription)
.foregroundColor(.red)
}
Button(action: emeal.beginNFCSession) {
Text("Scan Emeal")
}
}
}
}
EmealKit 可通过 Swift Package Manager 安装。
.package(url: "https://github.com/kiliankoe/EmealKit.git", from: "<#latest#>")
此库目前正在以下应用程序中使用
知道其他使用此库的应用程序吗?请打开一个 PR 并将其添加到列表中! 😊