Adhan Swift

badge-languages badge-pms badge-platforms

badge-pod badge-travis badge-cov

Adhan Swift 是一个经过充分测试且文档完善的库,用于计算伊斯兰祈祷时间。 Adhan Swift 支持 Swift 4.0、Swift 4.2、Swift 5.0 和 Objective-C。

所有天文计算均来自 Jean Meeus 的《天文算法》一书中的高精度公式。 美国海军天文台天文应用部门和国家海洋和大气管理局地球系统研究实验室推荐了这本书。

可以在父仓库 Adhan 中找到 Adhan 在其他语言中的实现。

安装

CocoaPods

对于 CocoaPods,将以下内容添加到您的 Podfile

pod 'Adhan'

Carthage

对于 Carthage,将以下内容添加到您的 Cartfile

github "batoulapps/adhan-swift" "main"

Swift Package Manager

对于 SPM,将以下内容添加到您的 Package.swift 文件中

// swift-tools-version:4.2
dependencies: [
    .package(url: "https://github.com/batoulapps/adhan-swift", .branch("main")),
]

手动

您也可以手动添加 Adhan。

用法

要获取祈祷时间,请初始化 PrayerTimes 结构,传入坐标、日期和计算参数。

let prayers = PrayerTimes(coordinates: coordinates, date: date, calculationParameters: params)

初始化参数

坐标

创建一个 Coordinates 结构,其中包含您要获取祈祷时间的地点经纬度。

let coordinates = Coordinates(latitude: 35.78056, longitude: -78.6389)

日期

为了避免时区混淆,传入的日期参数应该是 DateComponents 的实例。 需要填充年、月和日组件。 所有其他组件将被忽略。 年、月和日的值应该是您想要祈祷时间的当地日期。 这些日期组件应为公历。

let cal = Calendar(identifier: Calendar.Identifier.gregorian)
let date = cal.dateComponents([.year, .month, .day], from: Date())

计算参数 & 计算方法

其余所需信息包含在 CalculationParameters 结构中。

计算参数 & 方法指南

祈祷时间

一旦初始化了 PrayerTimes 结构,它将包含所有五个祈祷时间和日出时间的成员。 祈祷时间将是 NSDate 的实例,因此将指代世界标准时间的固定点。 要显示本地时区的这些时间,您需要创建一个日期格式化程序并设置适当的时区。

let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.timeZone = TimeZone(identifier: "America/New_York")!

print("fajr \(formatter.string(from: prayers.fajr))")

完整示例

let cal = Calendar(identifier: Calendar.Identifier.gregorian)
let date = cal.dateComponents([.year, .month, .day], from: Date())
let coordinates = Coordinates(latitude: 35.78056, longitude: -78.6389)
var params = CalculationMethod.moonsightingCommittee.params
params.madhab = .hanafi
if let prayers = PrayerTimes(coordinates: coordinates, date: date, calculationParameters: params) {
    let formatter = DateFormatter()
    formatter.timeStyle = .medium
    formatter.timeZone = TimeZone(identifier: "America/New_York")!

    print("fajr \(formatter.string(from: prayers.fajr))")
    print("sunrise \(formatter.string(from: prayers.sunrise))")
    print("dhuhr \(formatter.string(from: prayers.dhuhr))")
    print("asr \(formatter.string(from: prayers.asr))")
    print("maghrib \(formatter.string(from: prayers.maghrib))")
    print("isha \(formatter.string(from: prayers.isha))")
}

便捷实用工具

PrayerTimes 结构具有用于获取当前祈祷和下一次祈祷的功能。 您还可以获得指定祈祷的时间,从而更容易动态显示到下一次祈祷的倒计时。

let prayerTimes = PrayerTimes(coordinates: coordinates, date: date, calculationParameters: params)

let current = prayerTimes.currentPrayer()
let next = prayerTimes.nextPrayer()
let countdown = prayerTimes.time(for: next)

圣行时间

Adhan 库还可以计算圣行时间。 给定一个 PrayerTimes 实例,您可以获得一个包含 Qiyam 时间的 SunnahTimes 结构。

if let sunnahTimes = SunnahTimes(from: todayPrayers) {
	print(dateFormatter.string(from: sunnahTimes.lastThirdOfTheNight)
	print(dateFormatter.string(from: sunnahTimes.middleOfTheNight)
}

朝拜方向

获取从一组给定坐标到朝拜方向的度数(从北方开始)。

let nyc = Coordinates(latitude: 40.7128, longitude: -74.0059)
let qiblaDirection = Qibla(coordinates: nyc).direction

贡献

Adhan 公开提供给所有开发人员,以提供一个经过充分测试且文档完善的伊斯兰祈祷时间库。 我们接受功能贡献,前提是它们已正确记录并包含适当的单元测试。 我们也欢迎以不同位置的祈祷时间单元测试的形式提供贡献,我们要求正确记录比较值的来源。 对于所有 pull requests,使用 develop 作为基础分支。

许可证

Adhan 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE 文件。