Will never be executed. Не работает код с if/else

if
swift
xcode
ios

#1

Всем привет) Нужна помощь) написал кодик по выводу города и страны? если правильно выдает название города и страны и доп.слово. Вылезает предупреждение “Will never be executed”. А так же при выборе правильной страны и города выдает не верный результат.

let cityUSA = “Washington”
let cityRussia = “Moscow”
let cityGermany = “Berlin”
let cityFinland = “Helsinky”
let cityItaly = “Rome”

let countryUSA = “USA”
let countryRussia = “Russia”
let countryGermany = “Germany”
let countryFinland = “Finland”
let countryItaly = “Italy”

func cityOfCountry (city: String, country: String) -> String {
if cityUSA == countryUSA {
return("(cityUSA) - (countryUSA) - Right")
} else if cityUSA != countryUSA{
return("(city) - (country) - No Right")
}
if cityRussia == countryRussia {
return("(cityRussia) - (countryRussia) - Right")
} else {
return("(city) - (country) - No Right")
}
if cityGermany == countryGermany {
return("(cityGermany) - (countryGermany) - Right")
} else {
return("(city) - (country) - No Right")
}
if cityFinland == countryFinland {
return("(cityFinland) - (countryFinland) - Right")
} else {
return("(city) - (country) - No Right")
}
if cityItaly == countryItaly {
return("(cityItaly) - (countryItaly) - Right")
} else {
return("(city) - (country) - No Right")
}

}

Не могу до конца понять логику, как сделать


#2

У вас все время будет срабатывать это условие.
А если вдруг каким-то чудом оно не сработает, то тут

if cityRussia == countryRussia {
return("(cityRussia) - (countryRussia) - Right")
} else {
return("(city) - (country) - No Right")
}

будете попадать в else.

У вас все не правильно написано логически.


#3

Да, спасибо, понял уже когда создал Тикет) Сделал дополнительную проверку на страну, но все время выдает ошибку об “Missing return in global function expected to return 'String”"

func cityOfCountry (city: String, country: String) -> String {
if cityUSA == cityUSA && countryUSA == countryUSA {
return("(cityUSA) - (countryUSA) - Right")
} else if cityUSA != cityUSA || countryUSA != countryUSA{
return("(city) - (country) - No Right")
}
if cityRussia == cityRussia && countryRussia == countryRussia {
return("(cityRussia) - (countryRussia) - Right")
} else if cityRussia != cityRussia || countryRussia != countryRussia{
return("(city) - (country) - No Right")
}
if cityGermany == cityGermany && countryGermany == countryGermany{
return("(cityGermany) - (countryGermany) - Right")
} else if cityGermany != cityGermany || countryGermany != countryGermany{
return("(city) - (country) - No Right")
}
if cityFinland == cityFinland && countryFinland == countryFinland{
return("(cityFinland) - (countryFinland) - Right")
} else if cityFinland != cityFinland || countryFinland != countryFinland{
return("(city) - (country) - No Right")
}
if cityItaly == cityItaly && countryItaly == countryItaly{
return("(cityItaly) - (countryItaly) - Right")
} else if cityItaly != cityItaly || countryItaly != countryItaly{
return("(city) - (country) - No Right")
}

}

Не до конца могу понять логику как сделать…


#4

Если объяснить по простому, то у вас “масло масляное”.
У вас условия всегда верные, т.е. true.
Если вы только начали изучение, то видимо где-то пропустили момент как использовать условия правильно.
Во-вторых, параметры функции обычно используются больше, чем просто вернуть их назад.

Вам в условиях нужно сравнивать именно параметры с вашим списком.


#5

Все, понял)) Окончательный код у меня получился вот так:

let cityUSA = “Washington”
let cityRussia = “Moscow”
let cityGermany = “Berlin”
let cityFinland = “Helsinky”
let cityItaly = “Rome”

let countryUSA = “USA”
let countryRussia = “Russia”
let countryGermany = “Germany”
let countryFinland = “Finland”
let countryItaly = “Italy”

func cityOfCountry (city: String, country: String) -> String {
if city == cityUSA && country == countryUSA {
return("(cityUSA) - (countryUSA) - Right")
} else if city == cityRussia && country == countryRussia {
return("(cityRussia) - (countryRussia) - Right")
} else if city == cityGermany && country == countryGermany{
return("(cityGermany) - (countryGermany) - Right")
} else if city == cityGermany && country == countryGermany{
return("(cityGermany) - (countryGermany) - Right")
} else if city == cityFinland && country == countryFinland{
return("(cityFinland) - (countryFinland) - Right")
} else if city == cityItaly && country == countryItaly{
return("(cityItaly) - (countryItaly) - Right")
} else {
return("(city) - (country) - No Right")
}

}

cityOfCountry(city: cityItaly, country: countryRussia)

Не до конца понял, что ты имел ввиду “параметры функции обычно используются больше, чем просто вернуть их назад.”.

Имеешь ввиду про выходные параметры в функции? Как лучше сделать? Сделать функцию только с входящим параметром?


#6

Изначально входные параметры функции не использовались, а только лишь возвращались, смысла в этом тогда нет.
Если есть входные параметры, нужно их как-то использовать.

А что бы не городить столько условий, такого рода код делается через Enum.