最近看很多开发的书籍和文章都用这样的一种写法:
阅读来源:http://www.cocoachina.com/swift/20151207/14584.html
书籍阅读来源:《iOS开发指南,从零基础到App Store上架第三版》中的10.4.1的例子
.....
这个是最近的文章
最丑陋方法(Swift皮,Objective-C心)
TheOneAndOnlyKraken {
class var sharedInstance: TheOneAndOnlyKraken {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: TheOneAndOnlyKraken? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = TheOneAndOnlyKraken()
}
return Static.instance!
}
}
关于这种的写法,我思考了很久(也有一周以上,也有看其他资料,还是没理解透彻)
我主要不理解的一个逻辑关系是:
(类中声明类并创建内部类。应该是这样,有点绕)
1、在定义的TheOneAndOnlyKraken类中再定义一个TheOneAndOnlyKraken类型的sharedInstance类,这种嵌套,如果创建了一个sharedInstance,那这个sharedInstance和TheOneAndOnlyKraken的逻辑关系该怎么理解比较通俗易懂?有点死循环的感觉。
2、在sharedInstance类中定义了一个Static结构体,这个结构体中声明了一个TheOneAndOnlyKraken类型的变量instance。最后返回了这个instance变量。这instance和定义的两个类之间的逻辑关系又是如何理解比较通俗易懂。
PS:我是个初学者,对这些声明都比较熟悉,只是其中的逻辑结构不太理解,死循环。个人觉得如果纯粹记住这种写法(不确定是不是一种模板),不理解,都后面写程序中理解不透其中的逻辑结构,那就知其然不知其所以然。
暂时不理解这种逻辑关系,看网站上一大堆资料,貌似都没有好的解释。
求指导!
Kata kunci
Tetapi sejujurnya, menulis singleton dalam Swift tidak semestinya menyusahkan sama sekali. Seperti berikut:class
di sini tidak mentakrifkan kelas bersarang, tetapi menunjukkan bahawasharedInstance
ialah atribut kelas Sudah tentu,shareInstance
tidak menyatakan dengan tegascomputed property
(atribut dikira) yang disebutkan di atas. tetapiget-only property
(atribut baca sahaja).getter
ditakrifkan dalamstruct
(kaedah yang mengembalikan atribut) atribut baca sahaja ini. Terdapat dua atribut statik di dalamstruct
inionceToken
Apabila digunakan,dispatch_once
ialah fungsi yang digunakan untuk melaksanakan kaedah sekali dalam GCD Anda hanya perlu memahami bahawa penutupan yang diluluskan dalamdispatch_once
hanya akan dilaksanakan sekali dalam penutupan, Itu sahajadispatch_once
. Ayat ini memulakan tikaStatic.instance = TheOneAndOnlyKraken()
, kemudian menetapkan tika ini kepada atribut statikTheOneAndOnlyKraken
dalam strukturStatic
, dan akhirnya mengembalikaninstance
, iaitu, tikaStatic.instance!
dikembalikan Sebabnya ialahTheOneAndOnlyKraken
penyataan ini hanya akan dilaksanakan sekali, dan ia akan memulangkan secara langsung kejadian yang dijana pada masa hadapan, jadi singleton boleh dijamin. Adakah ini jelas?Static.instance = TheOneAndOnlyKraken()
sharedInstance bukan kelas, tetapi sifat terkira statik Jenis sifat ini ialah TheOneAndOnlyKraken. Anda boleh menganggapnya sebagai kaedah statik dengan 0 parameter >
dalam kurungan kerinting ialah kod untuk sifat pengiraan Bahagian yang mencipta contoh dijamin akan dilaksanakan sekali sahaja dengan dispatch_sekali
struct ...... return Static.instance!
Anda boleh merujuk kepada apa yang ditulis oleh blog asing tentang singleton yang pantas