• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift-单例模式的实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

过去Swift要实现单例,无非是这三种方式:全局变量,内部变量和dispatch_once方式。但都略显繁琐。

后来从1.2版本起,Swift中添加了如 static let 和 static var 这样的类变量的支持,这样单例的实现又简化了许多。

下面提供两种比较好的单例写法。(要注意:不管哪种写法都要注意将init()方法私有化。因为在Swift中,所有对象的构造器默认都是 public,需要重写init让其成为私有的,防止其他对象使用这个类的默认的'()'初始化方法来创建对象。这里感谢网友nowIsFuture的提 醒。)

方法1:
1
2
3
4
5
6
7
8
9
10
11
12
class AppManager {
    private static let _sharedInstance = AppManager()
     
    class func getSharedInstance() -> AppManager {
        return _sharedInstance
    }
     
    private init() {} // 私有化init方法
}
 
//使用方式
AppManager.getSharedInstance()


方法2:

1
2
3
4
5
6
7
8
class AppManager {
    static let sharedInstance = AppManager()
     
    private init() {} // 私有化init方法
}
 
//使用方式
AppManager.sharedInstance


附:为什么需要保证INIT的私有化? 

因为只有init()是私有的,才能防止其他对象通过默认构造函数直接创建这个类对象,确保你的单例是真正的独一无二。 
因为在Swift中,所有对象的构造器默认都是public,所以需要重写你的init让其成为私有的。这样就保证像如下的代码编译报错,不能通过。

1
2
var a1 = AppManager() //确保编译不通过
var a2 = AppManager() //确保编译不通过

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
swift中Double转String发布时间:2022-07-13
下一篇:
swift-动态计算文本高度发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap