【问题标题】:How to declare a constant that can be accessed by multiple viewcontrollers in Swift?如何在 Swift 中声明一个可以被多个视图控制器访问的常量?
【发布时间】:2016-01-12 04:12:14
【问题描述】:

我正在开发一个应用程序,其中包含使用相同常量的各种视图控制器。

例如

let wrongAnswerBanner = UIImageView(image: UIImage(named: "torn_banner"))

我尝试在视图控制器之外声明常量,但每当我尝试使用 self.

self.wrongAnswerBanner.hidden = false

我收到错误:“ViewController1”类型的值没有成员“wrongAnswerBanner”。如何声明这些常量,而不必在每个单独的视图控制器中重新声明它们?

【问题讨论】:

  • 用常量创建一个类或结构
  • UIImageView 不是一个很好的常数,因为它的各种属性(特别是它的 superviewframe)可能会在应用程序运行时发生变化……
  • 在这种情况下你有什么建议?
  • 每个视图控制器都应该在需要时创建错误答案横幅。如果有很多通用配置,您可以创建一个包含图像视图的 XIB,或者将代码分解为(例如)UIImageView 上的扩展。

标签: ios swift uiviewcontroller constants


【解决方案1】:

您可以在类范围之外声明常量并直接从模块内的任何文件中访问它。

文件 1

let MyConstant = "MyConstant"
class A {

}

文件 2

class B {
    // use MyConstant directly (eg. print(MyConstant))
}

我通常为UITableViewCell 标识符这样做。我将它们声明在我的 UITableViewCell 子类之上,并在 ViewController 文件中使用它们。尽管(正如其他开发人员提到的)UIImageView 可能不是常量的好候选者,但毫无价值。如果这对您的问题有意义,您也可以使用 Enums。

【讨论】:

  • 我试过这样做,但每当我在视图控制器的函数中使用 self 时,我都会收到错误消息:“ViewController1”类型的值没有成员“....”。
  • 你的意思是你正在尝试做self.MyConstant?您不能使用 self ,因为该常量实际上不是任何类的成员。只需简单地使用 MyConstant。例如。 label.text = MyConstant.
  • 如果我想做一些类似 self.wrongAnswerBanner.hidden = false 但在视图控制器内部的事情呢?
  • 这就是重点,self 没有引用 wrongAnswerBanner。如果可以的话,我建议您不要在该场景中使用常量,因为您想获得横幅的引用并想要操纵它的状态。
  • 那么你认为最好的做法是在每个单独的视图控制器中重新声明 UI 常量吗?
【解决方案2】:

尝试在没有self的情况下调用常量

【讨论】:

    【解决方案3】:

    用常量创建一个结构体:

    struct Constant {
    
        static let SomeConstant = "hey"
    
    }
    

    那么你可以从任何类中获取值

    let constant = Constant.SomeConstant
    

    【讨论】:

    • 没想到用struct,我去看看。
    【解决方案4】:

    根据我的说法,你必须在你的应用程序中创建一个 AppConstant.swift 文件,然后在 AppConstant.swift 文件中添加这一行

    let wrongAnswerBanner = UIImageView(image: UIImage(named: "torn_banner"))

    然后在任何控制器中,您都可以轻松访问 wrongAnswerBanner 而无需使用 self

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 2020-06-04
      相关资源
      最近更新 更多