Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Swift中dispatch_once的示例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

有没有在 Swift中如何使用dispatch_once的例子? (最好是一个来自苹果公司) 注意:在这种情况下,我是not using it for a singleton;我想运行任意代码一次. 更新:我主要感兴趣的是在实例方法中使用这个方法时推荐的惯例,但是在类方法,函数和全局上下文中的使用对于完整性来说将是有用的. dispatch_once_t是类型别名(Int).标题文件: /*!
有没有在 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.只需使用你最喜欢的任何东西,对你感觉很好,只要符合全局/静态范围.

大佬总结

以上是大佬教程为你收集整理的Swift中dispatch_once的示例全部内容,希望文章能够帮你解决Swift中dispatch_once的示例所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: