当前位置: 首页 > 知识库问答 >
问题:

发送至Swift的Obj-c代码-NSDateFormatter[重复]

彭华皓
2023-03-14

我正在尝试创建一个日期格式化程序,它可以延迟加载,并且只初始化一次。在Swift中,如果在全局范围内创建变量,它会自动延迟加载,因此这就得到了解决。但我如何以线程安全的方式只创建一次呢?我发现了这个obj-c代码:

(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";
  });
  return formatter;
}

但我在Swift中重新创建它时遇到了困难,因为静态变量只能在类型上声明,而不能在计算属性或函数上声明。这是否意味着我只能将其重新创建为一个类?

我知道如何创建一个单例作为一个类,我更想知道是否有更简单的方法来使用单例(全局计算属性vs类)。但经过仔细考虑,类可能会更好,而且它的单例实现非常简单。

共有1个答案

梁福
2023-03-14

我想类似的东西也能帮到你:

func formatter() -> NSDateFormatter! {
    struct myStatic  {
        static var dateFormatter: NSDateFormatter? = nil
        static var token: dispatch_once_t = 0;
    }
    dispatch_once(&myStatic.token) {
        myStatic.dateFormatter = NSDateFormatter();
        myStatic.dateFormatter?.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
    }
    return myStatic.dateFormatter;
}

或者:

lazy var formatter: NSDateFormatter = {
    let dateFormatter: NSDateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
    return dateFormatter
}()
 类似资料:
  • 问题内容: 我是新手,并不熟悉Objective-C。有人可以帮我将其转换为Swift吗?我得到这个代码雷Wenderlich最好的iOS做法-http://www.raywenderlich.com/31166/25-ios-app-performance-tips- tricks 您会将代码放在哪里?它将放入充满全局变量的类文件中吗? 问题答案: 如果您确实要寻找问题中方法的直接模拟,则可以执

  • 本文向大家介绍Swift使用Objective-C代码中的Swift类,包括了Swift使用Objective-C代码中的Swift类的使用技巧和注意事项,需要的朋友参考一下 示例 在同一模块中 在名为“ MyModule ”的模块内,Xcode生成一个名为的标头,该标头MyModule-Swift.h将公共Swift类公开给Objective-C。导入此标头以使用Swift类: 相关的构建设置:

  • 本文向大家介绍Swift调用Objective-C代码,包括了Swift调用Objective-C代码的使用技巧和注意事项,需要的朋友参考一下 最近iOS开发之新编程语言Swift在iOS开发圈内反响比较大,国内外都有很多教程或小示例。 虽然Swift这门语言仍然在不断的进化之中,而且变动还是比较大,苹果公司也不承诺目前所写代码会在将来兼容,但仍挡不住iOS开发者的热情。 为什么要使用Swift调

  • 问题内容: 代码: 输出: 我正在尝试将字符串转换为NSDate数据类型,但没有获得正确的值。我尝试了许多解决方案,但未返回正确的值。我需要yyyy-MM- dd格式(2016-04-02)与我的输入“ 2016-04-02”相同。如果有人可以帮上忙,那真是太好了。提前致谢 问题答案: 从字符串转换为NSDate时,如果未将时区设置为格式化程序,则将获得本地时区中日期的NSDate。我想您的时区是

  • 本文向大家介绍c#使用Socket发送HTTP/HTTPS请求的实现代码,包括了c#使用Socket发送HTTP/HTTPS请求的实现代码的使用技巧和注意事项,需要的朋友参考一下 C# 自带的HttpWebRequest效率太低,对于自组HTTP封包不好操作。 在写超级SQL注入工具时,研究了很长一段时间如何使用Socket来发送HTTP、HTTPS请求。 经过一年的修改和测试,可完美、高效发送并

  • 如何解决这个SMTP错误问题?当我发送邮件时,我会遇到这个错误信息。使用本地系统发送邮件不是问题。有人知道这个问题的解决方法吗? System.Net.Mail.SMTPException:SMTP服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1需要身份验证。 在System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode st