SwiftToTen

Swift Unit Tests

⏰🇬🇧 识别英式英语时间并尝试将其转换为 Date

此软件包包含两个库,可以将英式英语口语时间(如 "It's seven o'clock.")转换为从 epoch 开始的可选 Date,您可以轻松从中提取小时和分钟 DateComponents(如果需要)。

用法

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

Point-Free Dependencies 用法

在您的 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

您可以通过将其作为包依赖项添加到 Xcode 项目中,来添加 SwiftToTen。

  1. File 菜单中,选择 Swift Packages › Add Package Dependency...
  2. 在包仓库 URL 文本字段中输入“https://github.com/renaudjenny/swift-to-ten
  3. 选择您感兴趣的库之一。请参阅上面

作为包依赖项

编辑您的 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
            ]
        ),
        ...
    ]
)

使用此库的应用