【问题标题】:Swift 3: Defining var labels: [UILabel] fails [duplicate]Swift 3:定义 var 标签:[UILabel] 失败 [重复]
【发布时间】:2016-09-25 18:32:27
【问题描述】:

我被 Swift 3 中的变量声明卡住了。我的代码如下所示:

代码开始

// Letter Buttons
@IBOutlet weak var LetterOneButton: UIButton!
@IBOutlet weak var LetterTwoButton: UIButton!
@IBOutlet weak var LetterThreeButton: UIButton!
@IBOutlet weak var LetterFourButton: UIButton!
@IBOutlet weak var LetterFiveButton: UIButton!

// Word Fields
@IBOutlet weak var WordLetterOne: UILabel!
@IBOutlet weak var WordLetterTwo: UILabel!
@IBOutlet weak var WordLetterThree: UILabel!
@IBOutlet weak var WordLetterFour: UILabel!
@IBOutlet weak var WordLetterFive: UILabel!

// Counter
@IBOutlet weak var CounterLabel: UILabel!

// Skip Button
@IBOutlet weak var SkipButtonLabel: UIButton!

// Define Variables
var index: Int = 0

错误出现在下面一行:

var labels: [UILabel] = [WordLetterOne, WordLetterTwo, WordLetterThree, WordLetterFour, WordLetterFive]

错误消息是“不能在属性初始化器中使用实例成员 'WordLetterOne';属性初始化器在 'self' 可用之前运行”。之后,声明另一个字符串没有任何问题。

var letters: [String] = ["A", "B", "C", "D", "E"] 

代码结束

非常感谢您的帮助!

编辑:

self.lazy var labels: [UILabel] = [WordLetterOne, WordLetterTwo, WordLetterThree, WordLetterFour, WordLetterFive]

给出错误“一行上的连续声明必须用';'分隔”和“实例成员'WordLetterOne'不能用于类型'ViewController'”

【问题讨论】:

  • 错误信息已经说明了问题所在。你有什么问题?
  • 我不知道如何解决这个错误,@CezaryWojcik
  • 不要在属性初始化器中使用属性。错误消息说“你不能这样做”,所以解决办法是不要这样做。
  • 计算属性。或者将 array 设为 @IBOutlet 并删除编号变量。
  • 将其定义为惰性:lazy var labels: [UILabel] = [self.WordLetterOne, self.WordLetterTwo, self.WordLetterThree, self.WordLetterFour, self.WordLetterFive]

标签: ios swift xcode swift3 variable-declaration


【解决方案1】:

就像它说的:当运行时构建数组初始化器时,你试图放入数组的属性还没有定义(因为self 还没有准备好)。

尽量使属性静态(取决于您的实际情况)。 或者——在init方法中初始化labels数组。

letters 的定义没问题,因为“A”、“B”等都是常量。

【讨论】:

  • 谢谢!你能给我举个例子,说明在上述案例中的具体情况吗?提前感谢您的努力!
  • 在评论中尝试@vacawama 的建议(懒惰)——听起来像是一个非常干净的解决方案(尚未测试)。
猜你喜欢
  • 1970-01-01
  • 2016-07-24
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多