Reputation: 7375
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
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
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
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
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