发生错误:无法在 属性 初始化程序中使用实例成员 'card0'; 属性 初始值设定项 运行 在 'self' 可用之前
An error occurs :Cannot use instance member 'card0' within property initializer; property initializers run before 'self' is available
我遇到以下错误:
不能在 属性 初始值设定项中使用实例成员 'card0'; 属性 初始值设定项 运行 在 'self' 可用之前
我是大一新生,非常感谢您的建议和提示:)
代码:
视图控制器:
import UIKit
class ViewController: UIViewController {
let card0: Card = startingcard()
var pl1: Card = firstplayercard(card0: card0)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
struct Card {
var signs: [Int]
var restSymbols: [Int]
var matching: Int
}
func startingcard() -> Card {
let randomChoice = GKRandomDistribution(lowestValue: 0, highestValue: 15)
var symbols = [Int]()
for index in 0...15{
symbols.append(index)
}
var card = [Int]()
var i = 5
while i >= 0 {
let a = randomChoice.nextInt()
let n = symbols[a]
if n > 0 {
card.append(n)
symbols[a] = 0
}else{
i += 1
}
i -= 1
}
print(symbols)
print(card)
return Card(signs: card, restSymbols: symbols, matching: 0)
}
func firstplayercard(card0: Card) -> Card{
let randomChoice = GKRandomDistribution(lowestValue: 0, highestValue: 15)
let secondRandom = GKRandomDistribution(lowestValue: 0, highestValue: 5)
var symbols = card0.restSymbols
var playerCard = [Int]()
var i = 5
while( i >= 0) {
let a = randomChoice.nextInt()
let n = symbols[a]
if( n != 0){
playerCard.append(n)
symbols[a] = 0
}else{
i += 1
}
i -= 1
}
let k = secondRandom.nextInt()
let l = secondRandom.nextInt()
playerCard[k] = card0.signs[l]
//return k to symbols, because it's unused
symbols[k] = k
print("Player card:\n")
print(playerCard)
print(symbols)
print(l)
return Card(signs: playerCard, restSymbols: symbols, matching: l )
}
您需要将 pl1
存储 属性 转换为 延迟存储 属性:
class ViewController: UIViewController {
let card0: Card = startingcard()
lazy var pl1: Card = firstplayercard(card0: card0)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
Lazy properties are useful when the initial value for a property is dependent on outside factors whose values are not known until after an instance’s initialization is complete.
您可以在“惰性存储属性”一章下的 official documentation 中阅读有关惰性属性的更多信息。
我遇到以下错误: 不能在 属性 初始值设定项中使用实例成员 'card0'; 属性 初始值设定项 运行 在 'self' 可用之前
我是大一新生,非常感谢您的建议和提示:)
代码: 视图控制器:
import UIKit
class ViewController: UIViewController {
let card0: Card = startingcard()
var pl1: Card = firstplayercard(card0: card0)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
struct Card {
var signs: [Int]
var restSymbols: [Int]
var matching: Int
}
func startingcard() -> Card {
let randomChoice = GKRandomDistribution(lowestValue: 0, highestValue: 15)
var symbols = [Int]()
for index in 0...15{
symbols.append(index)
}
var card = [Int]()
var i = 5
while i >= 0 {
let a = randomChoice.nextInt()
let n = symbols[a]
if n > 0 {
card.append(n)
symbols[a] = 0
}else{
i += 1
}
i -= 1
}
print(symbols)
print(card)
return Card(signs: card, restSymbols: symbols, matching: 0)
}
func firstplayercard(card0: Card) -> Card{
let randomChoice = GKRandomDistribution(lowestValue: 0, highestValue: 15)
let secondRandom = GKRandomDistribution(lowestValue: 0, highestValue: 5)
var symbols = card0.restSymbols
var playerCard = [Int]()
var i = 5
while( i >= 0) {
let a = randomChoice.nextInt()
let n = symbols[a]
if( n != 0){
playerCard.append(n)
symbols[a] = 0
}else{
i += 1
}
i -= 1
}
let k = secondRandom.nextInt()
let l = secondRandom.nextInt()
playerCard[k] = card0.signs[l]
//return k to symbols, because it's unused
symbols[k] = k
print("Player card:\n")
print(playerCard)
print(symbols)
print(l)
return Card(signs: playerCard, restSymbols: symbols, matching: l )
}
您需要将 pl1
存储 属性 转换为 延迟存储 属性:
class ViewController: UIViewController {
let card0: Card = startingcard()
lazy var pl1: Card = firstplayercard(card0: card0)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
Lazy properties are useful when the initial value for a property is dependent on outside factors whose values are not known until after an instance’s initialization is complete.
您可以在“惰性存储属性”一章下的 official documentation 中阅读有关惰性属性的更多信息。