【问题标题】:Swift - Calling a function within an initializer and defining it outsideSwift - 在初始化程序中调用函数并在外部定义它
【发布时间】:2020-01-29 21:07:05
【问题描述】:

我是 Swift 新手,在理解 UITabBar 的子类的以下代码行时遇到了一些困难:

override init(frame: CGRect) {
  super.init(frame: frame)
  customInit()
  }
		
required init?(coder aDecoder: NSCoder) {
  super.init(coder: aDecoder)
  customInit()
  }

func customInit(){
  self.tintColor = .white
  self.barTintColor = .white
  self.backgroundColor = .white
  }

对不起,如果这看起来像一个愚蠢的问题,但是知道函数必须在被调用之前定义,并且初始化程序中的属性应该在“super.init”之前,我想知道两个 customInit() 调用是什么它们在哪里?

再说一次,我是 Swift 的新手,我真的很想了解它是如何工作的,但在任何地方都没有找到任何合适的答案。

非常感谢您的帮助!

【问题讨论】:

  • 函数不需要在之前被调用;它们需要在被调用时可用。

标签: swift function initialization


【解决方案1】:

您有两个选项来使用您的自定义类,例如,CustomTabBar

  1. 在代码中实例化此类
  2. 在故事板中使用它

所以有两种类型的初始化器:

  1. init(frame: CGRect),如果你从代码初始化这个类就会被调用,例如,CustomTabBar(frame: CGRect(.zero))

  2. required init?(coder aDecoder: NSCoder),如果您在 Storyboard 中使用此自定义类,将自动调用它。

他为什么把代码写在 init 之外的一个单独的 func 中?

不要在两个初始化方法中重复此代码。

initializer 应该在 "super.init?

之前

这取决于您是需要先调用 super 还是先调用实现,而且我看到您只更改颜色,因此您需要先对其进行初始化以设法更改其颜色和样式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多