blue
blue

Reputation: 7375

Swift error: 'missing return in function'?

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
        }
    }
}

Upvotes: 5

Views: 14801

Answers (4)

priyanshu patel
priyanshu patel

Reputation: 1

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let button = DropDownButton()
    switch button {
    case userButton:
        return userButton.dropView.dropDownOptions.count
    case categoryButton:
        return categoryButton.dropView.dropDownOptions.count
    default:
        return 0
    }

Upvotes: 0

valeriana
valeriana

Reputation: 159

You could use a switch statement. Here is an example I have used:

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let button = DropDownButton()
    switch button {
    case userButton:
        return userButton.dropView.dropDownOptions.count
    case categoryButton:
        return categoryButton.dropView.dropDownOptions.count
    default:
        return 0
    }

Thought it might help somebody, Happy coding

Upvotes: 0

Upworks
Upworks

Reputation: 267

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
}

Upvotes: 2

shree.pat18
shree.pat18

Reputation: 21757

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.

Upvotes: 9

Related Questions