Swift中dispatch_once的示例
有没有在
Swift中如何使用dispatch_once的例子? (最好是一个来自苹果公司)
注意:在这种情况下,我是not using it for a singleton;我想运行任意代码一次. 更新:我主要感兴趣的是在实例方法中使用这个方法时推荐的惯例,但是在类方法,函数和全局上下文中的使用对于完整性来说将是有用的.
dispatch_once_t是类型别名(Int).标题文件:
/*! * @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") } } } 静态在一个包裹在struct中的方法 不喜欢yur类的静态属性?想用你的方法吗?将它包装成如下结构: class func doItOnce() { struct Tokens { static var token: dispatch_once_t = 0 } dispatch_once(&Tokens.token) { print("Do it once") } } 其实我不知道任何苹果推荐,最佳实践,…如何做到dispatch_once.只需使用你最喜欢的任何东西,对你感觉很好,只要符合全局/静态范围. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |