【问题标题】:Why am I getting a compiler error when using 'lazy var' to create an instance?为什么在使用“lazy var”创建实例时出现编译器错误?
【发布时间】:2019-02-28 13:32:36
【问题描述】:

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

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    这看起来像是斯坦福大学最近一门 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 尚未初始化,则可能会在以后引入问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      相关资源
      最近更新 更多