我是编程的新手,在我的Tic-tac-toe游戏中遇到此错误:属性self.circle1
未在super.init
来电时初始化。
我已经控制拖动并连接了我的UIImage
和按钮以及所有这些并且我也尝试从这些声明中取出strong
(以使插座变弱)和我我仍然无法运行我的应用程序。这是怎么回事?
我的代码:
import UIKit
class ViewController: UIViewController {
//Initializing all imgs as variables:
@IBOutlet strong var circle1: UIImageView
@IBOutlet strong var circle2: UIImageView
@IBOutlet strong var circle3: UIImageView
@IBOutlet strong var circle4: UIImageView
@IBOutlet strong var circle5: UIImageView
@IBOutlet strong var circle6: UIImageView
@IBOutlet strong var circle7: UIImageView
@IBOutlet strong var circle8: UIImageView
@IBOutlet strong var circle9: UIImageView
@IBOutlet strong var circleBtn1: UIButton
@IBOutlet strong var circleBtn2: UIButton
@IBOutlet strong var circleBtn3: UIButton
@IBOutlet strong var circleBtn4: UIButton
@IBOutlet strong var circleBtn5: UIButton
@IBOutlet strong var circleBtn6: UIButton
@IBOutlet strong var circleBtn7: UIButton
@IBOutlet strong var circleBtn8: UIButton
@IBOutlet strong var circleBtn9: UIButton
@IBOutlet strong var resetBtn: UIButton
@IBOutlet strong var ResultsLabel: UILabel
//Creating variables:
var plays = Dictionary<Int,Int>()
var done = false
var aiDeciding = false
//Function that says what to do if a UIButton is clicked:
@IBAction func UIbuttonClicked(sender:UIButton) {
ResultsLabel.hidden = true
if !plays[sender.tag] && !aiDeciding && !done {
setImgforCircle(sender.tag, player:1)
}
//Executing these functions:
checkforWin()
aiTurn()
}
//Function that says sets an X or O in the proper circle depending on player:
func setImgforCircle(spot:Int, player:Int) {
var playerMark = player == 1 ? "x" : "o"
plays[spot] = player
switch spot {
case 1:
circle1.image = UIImage(named: playerMark)
case 2:
circle2.image = UIImage(named: playerMark)
case 3:
circle3.image = UIImage(named: playerMark)
case 4:
circle4.image = UIImage(named: playerMark)
case 5:
circle5.image = UIImage(named: playerMark)
case 6:
circle6.image = UIImage(named: playerMark)
case 7:
circle7.image = UIImage(named: playerMark)
case 8:
circle8.image = UIImage(named: playerMark)
case 9:
circle9.image = UIImage(named: playerMark)
default:
circle2.image = UIImage(named: playerMark)
}
}
//Function that sees if certain paths of circles have the same mark
func checkforWin() {
var whoWon = ["Lost":0, "Won":1]
for (key,value) in whoWon {
if ((plays[1] == value && plays[2] == value && plays[3] == value) || //across top row
(plays[4] == value && plays[5] == value && plays[6] == value) || //across middle row
(plays[7] == value && plays[8] == value && plays[9] == value) || //across bottom row
(plays[1] == value && plays[4] == value && plays[7] == value) || //down left column
(plays[2] == value && plays[5] == value && plays[8] == value) || //down middle column
(plays[3] == value && plays[6] == value && plays[9] == value) || //down right column
(plays[1] == value && plays[5] == value && plays[9] == value) || //diagonal going right
(plays[7] == value && plays[5] == value && plays[3] == value)) { //diagonal going left
ResultsLabel.hidden = false
ResultsLabel.text = "You \(key)!"
}
}
}
func aiTurn() {
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 0 :(得分:2)
首先,没有理由拥有所有strong
个。删除它们。所有
然后,如果您不想在init()方法中初始化它们,那么您应该将所有这些选项都设置为可选项。所以采取这样的方式:
@IBOutlet strong var circle1: UIImageView
将其改为:
@IBOutlet var circle1: UIImageView!