⏰🇬🇧 识别英式英语时间并尝试将其转换为 Date
此软件包包含两个库,可以将英式英语口语时间(如 "It's seven o'clock."
)转换为从 epoch 开始的可选 Date
,您可以轻松从中提取小时和分钟 DateComponents
(如果需要)。
SwiftToTen
是主库,它有一个静态函数,签名如下:live(time: String, calendar: Calendar) -> Date?
。您只需提供如上例所示的时间,请参阅以下示例SwiftToTenDependency
是对上述库的包装,方便与 Point-Free Dependencies 库或使用 The Composable Architecture (TCA) 构建的项目集成。import SwiftToTen
// Set the Calendar to your convenience
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(secondsFromGMT: 0) ?? calendar.timeZone
var recognizedTime: Date?
// Classic time with HH:mm format
recognizedTime = SwiftToTen.live(time: "It's 12:34", calendar: calendar)
print(recognizedTime) // Optional(1970-01-01 12:34:00 +0000)
// In the afternoon HH:mm pm format
recognizedTime = SwiftToTen.live(time: "It's 1:37 pm", calendar: calendar)
print(recognizedTime) // Optional(1970-01-01 13:37:00 +0000)
// With o'clock format
recognizedTime = SwiftToTen.live(time: "It's 7 o'clock", calendar: calendar)
print(recognizedTime) // Optional(1970-01-01 07:00:00 +0000)
// With o'clock format in the afternoon
recognizedTime = SwiftToTen.live(time: "It's 2 o'clock in the afternoon", calendar: calendar)
print(recognizedTime) // Optional(1970-01-01 14:00:00 +0000)
// Midnight, ... to Midnight and ... past Midnight
recognizedTime = SwiftToTen.live(time: "It's midnight", calendar: calendar)
print(recognizedTime) // Optional(1970-01-01 00:00:00 +0000)
recognizedTime = SwiftToTen.live(time: "It's quarter to midnight", calendar: calendar)
print(recognizedTime) // Optional(1970-01-01 23:45:00 +0000)
recognizedTime = SwiftToTen.live(time: "It's 10 past midnight", calendar: calendar)
print(recognizedTime) // Optional(1970-01-01 00:10:00 +0000)
// If the string doesn't contain a recognizable time, it returns `nil`
recognizedTime = SwiftToTen.live(time: "It's show time!", calendar: calendar)
print(recognizedTime) // nil
在您的 Reducer
中添加 @Dependency(\.recognizeTime) var recognizeTime
,您将可以访问上述所有函数。
import ComposableArchitecture
import Foundation
import SwiftToTenDependency
public struct BritishTime: ReducerProtocol {
public struct State: Equatable {
public var date: Date?
public init(date: Date? = nil) {
self.date = date
}
}
public enum Action: Equatable {
case utteranceChanged(String)
}
@Dependency(\.calendar) var calendar
@Dependency(\.recognizeTime) var recognizeTime
public init() {}
public var body: some ReducerProtocol<State, Action> {
Reduce { state, action in
switch action {
case let .utteranceChanged(utterance):
state.date = recognizeTime(time: utterance, calendar: calendar)
return .none
}
}
}
您可以通过将其作为包依赖项添加到 Xcode 项目中,来添加 SwiftToTen。
编辑您的 Package.swift
以添加此库。
let package = Package(
...
dependencies: [
.package(url: "https://github.com/renaudjenny/swift-to-ten", from: "1.2.0"),
...
],
targets: [
.target(
name: "<Your project name>",
dependencies: [
.product(name: "SwiftToTen", package: "swift-to-ten"), // <-- Basic version
.product(name: "SwiftToTenDependency", package: "swift-to-ten"), // <-- Point-Free Dependencies library wrapper
]
),
...
]
)