2015-04-16 151 views
-1

我得到这个错误,但我不知道如何解决它类没有初始化

class GameView2: UIViewController { 

    @IBOutlet weak var resetButton: UIButton! 
    @IBOutlet weak var resultLabel: UILabel! 
    @IBOutlet weak var player1ScoreLabel: UILabel! 
    @IBOutlet weak var player2ScoreLabel: UILabel! 

    var selectedPlayer: Int! 
    var currentPlayerMove: Int 
    var previousPlayerMove: Int! 
    var player1Score: Int 
    var player2Score: Int 
+1

你需要一个init()方法来填充currentPlayerMove,player1Score和player2Score,因为它们既不可选也不隐含解包选项 – sketchyTech

回答

4

在迅速所有非可选存储的属性必须被初始化,无论是在线还是在初始化。

在你的类有6种可选的性质(如所有展开的隐式定义的,通过!结束的那些)和3个非可选的属性(currentPlayerMoveplayer1Scoreplayer2Score)。你应该是内联的初始化它们:

var currentPlayerMove: Int = 0 
var player1Score: Int = 0 
var player2Score: Int = 0 

或在初始化,或使它们可选,或使它们隐含展开选配:

var currentPlayerMove: Int! 
var player1Score: Int! 
var player2Score: Int! 

,并使用它们前初始化- 一个不好的地方就是viewDidLoad

func viewDidLoad() { 
    super.viewDidLoad() 

    currentPlayerMove = 0 
    player1Score = 0 
    player2Score = 0   

    ... 
} 

一些准则:

  • 使用正常的可选如果该属性可以是零
  • 使用隐式展开的可选如果属性应该是不为零,但你不能初始化内嵌或在初始化 - 警告:隐式访问当它为零时解包导致运行时异常,请务必在使用前正确初始化
  • 如果该属性应该不为零,则可以使用非可选,并且可以初始化内联或初始化程序 - 这应始终为优选的解决方案,而不是隐含地解开,在可能的情况下