当前位置: 首页 > 面试题库 >

Swift中类的“初始化”类方法?

应煌
2023-03-14
问题内容

我正在寻找类似于Objective-C的+(void)initializeclass方法的行为,因为该方法在类初始化时被调用一次,此后不再被调用。

一个简单class init () {}class闭合将非常时尚!而且很显然,当我们在结构闭包中使用“ class vars”而不是“
static vars”时,这一切都将非常匹配!


问题答案:

如果您有一个Objective-C类,最简单的方法就是重写+initialize。但是,请确保您的类的
类也被覆盖+initialize,否则您的类的
+initialize可能会被多次调用!如果需要,可以使用dispatch_once()(如下所述)防止出现多个呼叫。

class MyView : UIView {
  override class func initialize () {
    // Do stuff
  }
}

如果您有Swift类,那么最好的方法就是dispatch_once()init()语句内。

private var once = dispatch_once_t()

class MyObject {
  init () {
    dispatch_once(&once) {
      // Do stuff
    }
  }
}

此解决方案与+initialize(第一次给Objective-C类发送消息时称为)不同,因此不是对问题的真正答案。但是,IMO效果很好。



 类似资料:
  • 我找不到任何关于这个具体案例的具体SO帖子,所以我想问一下我认为是/否的问题。 以下是JLS§12.4.2(Java SE 8),清单6-7: 我的问题是:这是否意味着子类的final static变量在超类的静态初始化之前初始化(假设final static作为其声明的一部分初始化)?

  • 问题内容: 作为学习练习,我尝试实现一个子类,该子类提供一个新的便捷初始化器,该初始化器采用一个数字并构造一个ShapeNode,该ShapeNode是一个数字宽度和高度的平方。 根据《雨燕书》: 规则1 如果您的子类没有定义任何指定的初始化器,它将自动继承其所有超类的指定初始化器。 规则二 如果您的子类提供了其所有超类指定初始化器的实现(通过按照规则1继承它们,或通过提供自定义实现作为其定义的一

  • 类初始化规则规定:如果由于访问静态字段而触发类初始化,则只初始化声明了静态字段的类,即使静态字段被子类、子接口的类型或接口的实现类引用,也不会触发超类或子类的初始化。然后在下面的代码中,只应打印“初始化超类”。 } 当我运行这个时,输出:

  • 本文向大家介绍Swift中初始化方法的顺序介绍,包括了Swift中初始化方法的顺序介绍的使用技巧和注意事项,需要的朋友参考一下 与 Objective-C 不同,Swift 的初始化方法需要保证类型的所有属性都被初始化。所以初始化方法的调用顺序就很有讲究。在某个类的子类中,初始化方法里语句的顺序并不是随意的,我们需要保证在当前子类实例的成员初始化完成后才能调用父类的初始化方法: 一般来说,子类的初

  • 当我在iReport 5.1.0中预览JasperReports的报告时,它执行得很好。它包含一个饼图,当我需要从jsp文件运行它时,问题就来了。 烧烤-1.5-beta1.jar commons-beanutils-1.8.2.jar Commons-Collections-3.2.1.jar commons-digester-2.1.jar commons-javaflow-20060411.

  • 问题内容: 我有两节课,和 通过上面的实现,我得到了错误: 为什么在致电之前必须先设置? 问题答案: 引用Swift编程语言,它回答了您的问题: “ Swift的编译器执行四项有用的安全检查,以确保两阶段初始化完成且没有错误:” 安全检查1“指定的初始值设定项必须确保由其类引入的所有属性在将其委托给超类初始值设定项之前都已初始化。” 摘录自:苹果公司“ The Swift Programming