使用“ lazy var”创建实例时,为什么会出现编译器错误?

时间:2018-09-25 01:47:29

标签: ios swift

在ViewController.swift中-我在类的开头声明了一个懒惰的var游戏,但仍然收到错误

  

不能在属性初始化程序中使用实例成员'cardButtons';属性初始化程序在“自我”可用之前运行

import UIKit

class ViewController: UIViewController {

lazy var game = Concentration(numberOfPairsOfCards: (cardButtons.count + 1) / 2)

@IBOutlet var cardButtons: [UIButton]!

var emojiChoices = ["", "", "", "" ]

@IBAction func touchCard(_ sender: UIButton) {
    flipCount += 1
    if let cardNumber = cardButtons.index(of: sender) {
        flipCard(withEmoji: emojiChoices[cardNumber], on: sender)
    } else {
        print("Chosen card not in cardButtons")
    }
}
}

这里是“集中”类,我正在尝试创建一个实例     导入基金会

class Concentration {

var cards = [Card]()

init(numberOfPairsOfCards: Int) {
  for _ in 1...numberOfPairsOfCards {
    let card = Card()
    cards += [card, card]
  }
}
}

1 个答案:

答案 0 :(得分:0)

这看起来像是斯坦福大学最近的iOS课程中的示例项目。无论如何,您的惰性变量的语法看起来不正确。

更改

lazy var game = Concentration(numberOfPairsOfCards: (cardButtons.count + 1)/2)

lazy var game : Concentration = { 
   return Concentration(numberOfPairsOfCards: (cardButtons.count + 1)/2) 
}()

但是,访问另一个变量(cardButtons.count)的值,尽管在当前代码中可能还不错,但是如果在引用游戏之前尚未初始化cardButtons,则稍后可能会出现问题。