Search code examples
iosswifttic-tac-toe

Code error in Tic-Tac-Toe game


I would really appreciate your help with the following. I have been battling this small nuisance for a while now but without luck. I have this bit of code thats basically simulates a AI playing TIC TAC TOE against a player.

let Result = RowCheck(value: 0)
if Result != nil {
    println("Computer has two in a row")
    var WhereToPlayResult = WhereToPlay(Result.location, pattern: Result.pattern)
    if !IsOccupied(WhereToPlayResult) {
        SetImageForSpot(WhereToPlayResult, player: 0)
        aiDeciding = false
        CheckForWin()
        return
    }
    return
}

RowCheck just checks for a pattern to play against.

func RowCheck(#‎value:Int) -> (location:String,pattern:String)? {
    var AcceptableFinds = ["011","110","101"]
    var FindFuncs = [CheckTop,CheckBottom,CheckLeft,CheckRight,CheckMiddleAcross,CheckMiddleDown,CheckDiagionalRightLeft,CheckDiagionalLeftRight]
    for Algorthm in FindFuncs {
        var AlgorthmResults = Algorthm(value:value)
        if (find(AcceptableFinds,AlgorthmResults.pattern) != nil) {
            return AlgorthmResults
        }
    }
    return nil
}

But it gives me an error at:

var WhereToPlayResult = WhereToPlay(Result.location, pattern: Result.pattern)

Solution

  • Because your RowCheck method returns an optional (and might return nil), you need to either unwrap your optional or use a different assignment:


    let Result = RowCheck(value: 0)
    if Result != nil {
      var WhereToPlayResult = WhereToPlay(Result!.location, pattern: Result!.pattern)
      // ...                                    ^                          ^
    }
    

    if let Result = RowCheck(value: 0) {
      // ...
    }
    

    Side note: only classes should be named starting with a capital letter. To stay within Apple's code style, you should variables and functions as result, rowCheck, etc.