Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift error: 'missing return in function'?

Tags:

swift

I am creating a tic tac toe game and I came upon this error that I don't really understand: "Missing return in a function expected to return '(location:String, pattern:String)'". It is drawing the error on this block of code that should return "algorResults", which should give a location and pattern (both Strings) as was initialized on the first line. What's going wrong? Please thoroughly explain suggestions, thanks! My code:

//Function that implements part of AI that sees where a good place to play is:

func rowcheck(value:Int)->(location:String, pattern:String)? {
    var goodFinds = ["011","101","110"]
    var findFuncs = [checktop, checkbottom, checkmidAcross, checkleft, checkmidDown, checkright, checkLRdiag, checkRLdiag]
    for algor in findFuncs {
        var algorResults = algor(value)
        if find(goodFinds,algorResults.pattern) {
            return algorResults
        }
    }
}
like image 967
blue Avatar asked Jul 11 '14 03:07

blue


2 Answers

Your code only returns a value if find(goodFinds,algorResults.pattern) is satisfied, but there is no return value otherwise.

What you can do is to specify a default return value and do something like this (pseudo-code only):

variable result = defaultvalue

if find(goodFinds,algorResults.pattern) {
        result = algorResults
    }

return result

I should mention that I am not familiar with Swift, but this logic would ensure that you always return something, so that your method fulfills the contract.

like image 81
shree.pat18 Avatar answered Nov 13 '22 10:11

shree.pat18


Since your return type is an optional, you could do this:

func rowcheck(value:Int)->(location:String, pattern:String)? {
  var goodFinds = ["011","101","110"]
  var findFuncs = [checktop, checkbottom, checkmidAcross, checkleft, checkmidDown, checkright, checkLRdiag, checkRLdiag]
  for algor in findFuncs {
    var algorResults = algor(value)
    if find(goodFinds,algorResults.pattern) {
        return algorResults
    }
  }
   return nil
}
like image 34
Upworks Avatar answered Nov 13 '22 10:11

Upworks