【发布时间】:2021-03-19 11:14:06
【问题描述】:
在我的 Swift ViewController 中,我有代码
class ViewController: UIViewController {
var camera: UIButton!
var gameBrowser: UICollectionView!
let gameBrowserReuseID = "gamecell"
var games: [Game]!
let trialGame = Game(id: "5", title: "Dog", release_date: "1989", publisher: "Nintendo", price: "20", platform: "OS X", category: "Adventure", players: ["A", "B"])
let trialGame2 = Game(id: "5", title: "Dog", release_date: "1989", publisher: "Nintendo", price: "20", platform: "OS X", category: "Adventure", players: ["A", "B"])
games = [trialGame, trialGame2]
但是,在最后一行,我收到错误消息“无法在属性初始化程序中使用实例成员 'trialGame';属性初始化程序在 'self' 可用之前运行”(以及关于 trialGame2 的第二个错误)。我在其他论坛上搜索了这个错误,似乎这个错误一般是因为错误代码行中的一个或多个变量不能同时使用,但我不确定为什么会出现这种情况,因为我所做的只是将 Game 类的两个对象声明为常量。既然它们都是在我初始化数组游戏之前声明的,为什么它们都不可用?
大多数帖子建议在错误代码行前使用关键字“lazy”,因此:
lazy var games = [trialGame, trialGame2]
但由于某种原因,编译器告诉我我需要对关键字lazy进行初始化。我不确定这意味着什么,编译器的唯一建议是删除关键字。
如果有帮助,这是我的游戏类:
import UIKit
class Game: Codable {
var id: String!
var title: String!
var release_date: String!
var publisher: String!
var price: String!
var platform: String!
var category: String!
var players: [String]!
init(id: String, title: String, release_date: String, publisher: String, price: String, platform: String, category: String, players: [String]){
self.id = id
self.title = title
self.release_date = release_date
self.publisher = publisher
self.price = price
self.platform = platform
self.category = category
self.players = players
}
}
我在这里感到非常迷茫,因为错误背后的原因和解决方案都让我无法理解。感谢您的帮助!
【问题讨论】:
标签: ios swift cocoa-touch initialization computer-science