ios - 为什么在使用“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]
}
}
}
解决方案
这看起来像是最近斯坦福 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 尚未初始化,则可能会在以后引入问题。
推荐阅读
- excel - 从名称在另一个单元格中的 Google 工作表中提取数据
- npm - 失败的 GitLab CI Pipline 会丢失一些日志/错误消息
- scala - java.lang.ClassNotFoundException:org.apache.parquet.hadoop.metadata.CompressionCodecName
- r - 创建反向字符串
- java - 静态枚举的 Mockito 模拟方法
- python - 在 Django 中,我编写了 html 来编辑表单,在通过 value={{ i.full_name}} 从数据库中检索值期间它只显示名字
- c# - 同步方法可以在异步子调用完成之前继续执行吗?
- node.js - 我将如何阻止特定 IP 访问 node.js
- webpack - Webpack FileLoader 将引用的文件插入 HTML
- c# - 如何使用 System.Web.UI.DataVisualization.Charting 创建瀑布图