大佬教程收集整理的这篇文章主要介绍了Swift中dispatch_once的示例,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
注意:在这种情况下,我是not using it for a singleton;我想运行任意代码一次.
更新:我主要感兴趣的是在实例方法中使用这个方法时推荐的惯例,但是在类方法,函数和全局上下文中的使用对于完整性来说将是有用的.
/*! * @typedef dispatch_once_t * * @abstract * A predicate for use with dispatch_once(). It must be initialized to zero. * Note: static and global variables default to zero. */ typealias dispatch_once_t = Int
这里是dispatch_once文档的引用:
令牌变量必须存储在全局/静态范围中,并且必须初始化为零,这将导致以下代码:
import Foundation var token: dispatch_once_t = 0 dispatch_once(&token) { () -> Void in print("Called once") }
如果您省略= 0(令牌初始化),则它不起作用,因为编译器在初始化之前会产生变量’token’的错误地址,尽管静态和全局变量默认为零.测试在Xcode 7B2.
基于评论的更多例子.如果你在课堂里有几种可能性.
您无法在方法内声明静态属性,否则编译器生成静态属性只能在类型错误上声明.这不行:
class func doItOnce() { static var token: dispatch_once_t = 0 ... }
必须在类型上声明.这是在Swift 1.2(Xcode 6.3 IIRC)中引入的.
那么,如果我们不喜欢全球变数,我们可以做些什么?
类型上的静态变量
class MyClass { private static var token: dispatch_once_t = 0 class func doItOnce() { dispatch_once(&token) { print("Do it once") } } }
不喜欢yur类的静态属性?想用你的方法吗?将它包装成如下结构:
class func doItOnce() { struct Tokens { static var token: dispatch_once_t = 0 } dispatch_once(&Tokens.token) { print("Do it once") } }
其实我不知道任何苹果推荐,最佳实践,…如何做到dispatch_once.只需使用你最喜欢的任何东西,对你感觉很好,只要符合全局/静态范围.
以上是大佬教程为你收集整理的Swift中dispatch_once的示例全部内容,希望文章能够帮你解决Swift中dispatch_once的示例所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。