🌯 EmealKit

用于访问 德累斯顿学生服务中心 (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。

卡服务 (Cardservice)

卡服务进行交互,获取您的 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)

NFC 扫描

如果您的设备支持,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 并将其添加到列表中! 😊