xcode - 如何获取文本以显示科普特日历日期 SwiftUI
问题描述
我正在尝试使用 NSCalendar 初始化程序,但我无法理解文档。到目前为止我所拥有的是
struct SwiftUIView: View {
var body: some View {
let Date = NSCalendar.init(calendarIdentifier: .coptic)
Text("\(Date)")
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
它给了我一个错误说“可选类型'NSCalendar的值?' 必须解包为“NSCalendar”类型的值”
如果有人可以帮我解决这个问题,那就太好了。谢谢
解决方案
你想要的 Swift 接口是 Calendar 而不是 NSCalendar:
let calendar = Calendar(calendarIdentifier: .coptic)
NSCalendar 接口来自 ObjC,如果日历名称未知,则记录为返回 nil(您可以在 ObjC 中为该参数传递任意字符串)。
Swift 日历接口不会失败,因为它不允许您创建未知标识符。
有许多从 Objective-C 桥接的以“NS”开头的类型。有一个去掉“NS”前缀的 Swift 版本是很常见的。当你看到这个时,你通常应该使用 Swift 版本。它通常会以更类似于 Swift 的方式运行。
但是,如果您的目标是在科普特日历上显示当前日期,您将需要更多。日历代表整个日历,而不是特定日期。您将需要 DateFormatter 来创建本地化字符串。
例如:
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.calendar = Calendar(identifier: .coptic)
dateFormatter.eraSymbols = ["BC", "AM"] // See below
print(dateFormatter.string(from: Date()))
// Baramouda 18, 1737 AM
(我相信日历中有一个错误,例如科普特日历有时代符号“ERA0”和“ERA1”。我相信这个日历的正确符号是“BC”和“AM”。您可以通过直接分配它们来强制执行此操作到日期格式化程序。如果我是正确的,这是一个错误并且它会影响您,我建议打开Apple 反馈。另请参阅DateFormatter文档以了解如何自定义此字符串。)
就 xTwisteDx 而言,要将其放入 SwiftUI 中,您需要以下内容:
struct ContentView: View {
let dateFormatter: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.eraSymbols = ["BC", "AM"] // Workaround for Foundation bug
dateFormatter.calendar = Calendar(identifier: .coptic)
return dateFormatter
}()
func today() -> String {
dateFormatter.string(from: Date())
}
var body: some View {
Text(today())
.padding()
}
}
推荐阅读
- reactjs - 如何使用 Axios 和 React 传递 Header JWT 令牌?
- tensorflow - 为什么 tf.cond 中的 false_fn 从未调用过?
- javascript - 我正在尝试使用 JavaScript 对网页进行密码保护
- uwsgi - 为什么我应该使用 max-request 来避免内存泄漏?
- libgdx - Godot 或 LibGDX 用于 2d 游戏
- jquery - jQuery 顶层 $(this) 的含义
- dart - Flutter 中的 StringBuffer 无法按预期工作
- javascript - 点燃元素示例中“$=”或“?=”的用途
- javascript - Onclick 将链接添加到图像 src
- sql-server - 如何确定 check_constraint 失败的原因?