首页 > 解决方案 > 为什么在使用“lazy var”创建实例时出现编译器错误?

问题描述

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

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

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]
  }
}
}

标签: iosswift

解决方案


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

改变

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

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

然而,访问另一个变量 (cardButtons.count) 的值,虽然在您当前的代码中可能很好,但如果在引用游戏之前 cardButtons 尚未初始化,则可能会在以后引入问题。


推荐阅读