当前位置: 首页 > 面试题库 >

在Swift中创建NSDateFormatter?

公羊向荣
2023-03-14
问题内容

我是新手,并不熟悉Objective-C。有人可以帮我将其转换为Swift吗?我得到这个代码雷Wenderlich最好的iOS做法-http://www.raywenderlich.com/31166/25-ios-app-performance-tips-
tricks

您会将代码放在哪里?它将放入充满全局变量的类文件中吗?

- (NSDateFormatter *)formatter {
    static NSDateFormatter *formatter;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _formatter = [[NSDateFormatter alloc] init];
        _formatter.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy"; // twitter date format
    });
    return formatter;
}

问题答案:
  1. 如果您确实要寻找问题中方法的直接模拟,则可以执行以下操作:
    class MyObject {
    
    // define static variable
    
    private static let formatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
        return formatter
    }()
    
    // you could use it like so
    
    func someMethod(date: Date) -> String {
        return MyObject.formatter.string(from: date)
    }
    

    }

这些static属性像全局变量一样,享受dispatch_once其默认值的行为。有关更多信息,请参阅Apple的Swift博客dispatch_once中“
文件和初始化”条目末尾的讨论。

  1. 关于日期格式化程序的最佳做法,我建议:

    • 是的,谨慎的做法是不要不必要地创建和销毁您可能再次需要的格式化程序。在WWDC 2012视频,iOS App Performance:Responsiveness中,Apple明确鼓励我们

    • 每个日期格式缓存一个格式化程序;

    • NSLocale.currentLocaleDidChangeNotification通过添加观察器NotificationCenter,如果发生,则清除/重置缓存的格式化程序;和

    • 请注意,重置格式与重新创建一样昂贵,因此请避免重复更改格式化程序的格式字符串。

最重要的是,如果您重复使用相同的日期格式,请尽可能重用日期格式。

* 如果`DateFormatter`用于解析要与Web服务交换(或存储在数据库中)的日期字符串,则应使用`en_US_POSIX`语言环境来避免可能不使用公历的国际用户遇到的问题。请参阅[Apple技术问答#1480](https://developer.apple.com/library/mac/qa/qa1480/_index.html)或[`DateFormatter`文档中](https://developer.apple.com/documentation/foundation/dateformatter)的“使用固定格式的日期表示形式”讨论。(或在iOS 10和macOS 10.12中,使用[`ISO8601DateFormatter`](https://developer.apple.com/documentation/foundation/iso8601dateformatter)。)

但是,当dateFormat与with一起DateFormatter使用时,请使用当前语言环境来创建要呈现给最终用户的字符串,而en_US_POSIX在创建/解析要在应用程序内部使用或与Web服务交换的字符串时,请使用local。

* 如果要格式化用户界面的日期字符串,`dateFormat`请尽可能避免使用字符串文字来本地化字符串。在可能的地方使用`dateStyle`和使用`timeStyle`。而且,如果必须使用custom `dateFormat`,请使用模板来本地化字符串。例如,`E, MMM d`您可以使用`dateFormat(fromTemplate:options:locale:)`:

            formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "EdMMM", options: 0, locale: Locale.current)

例如,这将自动为美国用户显示“ 9月5日星期一”,而对于英国用户则显示“ 9月5日星期一”。

* 在`DateFormatter`现在在iOS 7及更高版本,并在Mac OS 10.9和更高版本上运行64位应用程序线程安全的。


 类似资料:
  • 问题内容: 我不熟悉Swift,也不确定如何从字符串路径(或某种对象)创建新文件夹 这是在带有Cocoa的OS X上。 问题答案: 我的理解是,您正在尝试使用swift以编程方式创建目录。下面给出的代码执行相同的操作。

  • 问题内容: 我一直在四处搜寻有关如何使用Swift 2.0为MapView制作MKCircle注释的良好解释,但我似乎找不到足够的解释。有人可以张贴一些示例代码来显示如何创建MKCircle批注吗?这是我用来制作地图并获取坐标的代码。 问题答案: 将展示有关如何使用xcode 8.3.3的swift 3在地图视图上创建圆形叠加层的分步方法 在您的主故事板文件中,将地图工具包视图拖到故事板的场景(视

  • 问题内容: 我一直在努力在Swift中创建UIAlertView,但由于某种原因,由于出现此错误,我无法正确执行该语句: 找不到接受提供的参数的’init’的重载 这是我的写法: 然后调用它,我正在使用: 截至目前,它崩溃了,我似乎无法正确理解语法。 问题答案: 从班级: //不推荐使用UIAlertView。改用 UIAlertController 和UIAlertControllerStyle

  • 问题内容: 我试图最终获得一个有效的,但似乎无法将我的字符串数据(来自)放入一个可用的对象中。 我已经看到这种方法的另一种选择: 但是我似乎找不到用例的任何文档。我愿意在必要时将字符串放入其他类型,但是使用Swift 的初始化选项似乎都不是我想要的。 问题答案: 在Swift 3中 在Swift 2中(或者如果您已经有一个实例) 在Swift 1中(或者如果您有swift ): 另请注意,这 是一

  • 问题内容: 我是9年级的新学生,学习 敏捷 ,创建了一个学校项目。 我正在尝试创建一个目录,要将扫描的文件保存为pdf格式。 创建目录时,出现以下错误。 错误1: 无法在属性初始化程序中使用实例成员’filemgr’;属性初始化程序在“自我”可用之前运行。 错误2: 预期申报 码: 请协助我解决这个问题。 谢谢。 问题答案: 请使用以下代码: Swift 4.0 和 Swift 3.0

  • 我一直在Swift中创建一个UIAlertView,但由于某种原因,我无法得到正确的语句,因为我得到了以下错误: 找不到接受所提供参数的“init”的重载