Каждый! Я новый участник Stack Overflow, как и новичок в быстром программировании. Я делаю этот пост, чтобы найти решение для следующего случая:
Я создаю на Swift приложение, используя инструмент командной строки для ввода данных. Приложение в основном работает как аутентификатор. Например, если кто-то введет США в качестве названия страны и возраст 17 лет, программа вернет сообщение типа «Вы не можете подать заявку на эту должность». В противном случае, если название страны — США, а возраст равен или выше 18 лет, возвращается сообщение «Вы можете перейти к следующему шагу». Я много раз пытался установить эти условия, но это не сработало. Я уже знаю, что функция readLine() является опциональной строкой, но как я могу заставить свою программу работать правильно? Это следует моему коду выше, чтобы вы поняли мои мысли.
Я очень ценю любую помощь. Опять же, я новичок и уже изучаю языки Swift, но я ищу какое-то решение, которое обрабатывает целые числа и строки и сравнивает оба типа данных. Большое спасибо!
Мой код:
import Foundation
print("Enter your country: ")
var country = readLine()
print("Enter your age: ")
var age = readLine()
if var country, var age = readLine(){
if country == "USA" && age < "18" {
print("You're not allowed to apply to this position.")
} else {
print("You can forward to the next step.")
}
}
PS: Как видите, я неправильно использую переменную age в качестве строки, но я хочу преобразовать ее в тип Int, а затем проверить, совпадает ли название страны со значением, которое я присвоил, или возраст равен или выше 18. Но решения пока не нашел.
Я пытаюсь найти решение, которое сравнивает два разных типа на Swift, используя инструмент командной строки и функцию readLine(), чтобы проверить, истинно ли условие или нет. Если это правда, выходное сообщение покажет, что пользователь может перейти к следующему шагу, в противном случае ему не будет разрешено следовать. Я держу объяснение в Интернете с нескольких дней, но не нашел ничего, что могло бы мне помочь. Я надеюсь получить некоторую помощь, используя форум Stack Overflow, чтобы получить полезный ответ.
Я пытался сделать что-то еще, как показано в упомянутой вами теме, но я все еще сталкиваюсь с ошибками в своем коде. А также я вижу, что одно из обоих условий (одна строка, другое целое число) выполняется, даже если одно из них ложно. Это моя проблема. Но я благодарю вас за внимание. Я продолжаю искать решение по этому делу.
Я надеюсь, что это поможет вам :)
import Foundation
print("Enter your country: ")
if let country = readLine() {
if let num = Int(country) {
print(num)
}
}
let country = readLine()
let age = readLine()
if let USA = country,
let num1 = Int(USA),
let num2 = Int(USA) {
print("The age of \(num1) and \(num2) is \(num1 + num2)")
}
Большое спасибо за твою помощь. Я пытаюсь решить эту проблему некоторое время, и теперь я лучше понимаю это.
Почему этот ответ был принят? Слишком много обращений к readLine. Он пытается превратить страну в Int. Он пытается добавить возраст и страну. Этот ответ никогда ничего не объяснял. Вы действительно должны принять другой ответ.
Дорогая Рима, при чем здесь США? Похоже, вы не понимаете этого конкретного вопроса
Во-первых, readline() означает, что вы читаете текущий до конца текущей строки. В качестве вашего кода, когда вы проверяете условие, вы снова вызываете readLine(). Неправильная часть здесь.
Я рекомендую вам сначала прочитать, а затем сделать всю свою логику. Вам просто нужно сначала прочитать только один раз
print("Enter your country: ")
var country = readLine()
print("Enter your age: ")
var ageString = readLine()
Затем проверьте, равно ли оно нулю или нет (потому что значение опции, которое является значением, может быть нулевым)
if country == nil || ageString == nil {
print("Error because one of them is nil")
fatalError()
}
Затем проверьте, можно ли конвертировать в Int или нет. Доберитесь сюда, если вы уверены, что ageString не равен нулю, потому что вы проверили выше. Таким образом, вы просто конвертируете
guard let ageString = ageString else {
print("Error age nil")
fatalError()
}
guard let age = Int(ageString) else {
print("Error age not a number")
fatalError()
}
Тогда ведь вы просто проверяете свое состояние
Полный код будет таким
print("Enter your country: ")
var country = readLine()
print("Enter your age: ")
var ageString = readLine()
// check nil first if nil return or do something first and not get to the rest
if country == nil || ageString == nil {
print("Error because one of them is nil")
fatalError()
}
guard let ageString = ageString else {
print("Error age nil")
fatalError()
}
guard let age = Int(ageString) else {
print("Error age not a number")
fatalError()
}
if country == "USA" && age < 18 {
print("You're not allowed to apply to this position.")
} else {
print("You can forward to the next step.")
}
Другие методы используются if let для достижения того, чтобы не было принудительного развертывания.
print("Enter your country: ")
var country = readLine()
print("Enter your age: ")
var ageString = readLine()
// check nil first if nil return or do something first and not get to the rest
if country == nil || ageString == nil {
print("Error because one of them is nil")
fatalError()
}
if let ageString = ageString {
if let age = Int(ageString) {
if country == "USA" && age < 18 {
print("You're not allowed to apply to this position.")
} else {
print("You can forward to the next step.")
}
} else {
print("Error age not a number")
fatalError()
}
}
Большое спасибо за вашу благодарную помощь. Я пытался понять, как преобразовать строку в число int. Это мне очень помогло. Еще раз спасибо. Я получу ваш код и изучу его, чтобы улучшить свои навыки в Swift. Да благословит тебя Бог, человек!
Хороший ответ, за исключением принудительного развертывания ageString. Я бы не показал это новичку. Это слишком опасно. Правильно используйте if let.
Уважаемый @HangarRash, обновлены методы if let для SO, чтобы иметь разные подходы
РЕШЕНИЕ РЕШЕНО!
Привет, ребята, прежде всего я хочу поблагодарить всех вас за ваши полезные ответы, которые мне очень помогли. Наконец-то у меня есть решение, и я собираюсь поделиться им с вами.
Что я сделал? Я только что создал две переменные, одну String и другую Integer. Затем, используя if var, чтобы принудительно развернуть переменную Int, я сделал оператор if, чтобы проверить, верны ли оба условия (в случае, если человек из США и его возраст равен или выше 18) . Теперь программа работает так, как я и хотел. Если вы из США, но вам нет 18 лет, вывод вернет сообщение о том, что вы не можете подать заявку. В противном случае вы можете переслать.
Я дам код выше. Если вы хотите сделать некоторые комментарии или какие-либо предложения, это будет приветствоваться.
Еще раз большое спасибо за все ваши ответы.
var countryCheck = "USA"
var ageCheck: Int = 18
print("Enter your country: ")
var country = readLine()
print("Enter your age: ")
var age = readLine()
if var countryCheck = country, var ageCheck = Int(age!) {
if countryCheck == "USA" && ageCheck >= 18 {
print("You can apply.")
} else {
print("You can not apply to this position.")
}
}
Отвечает ли это на ваш вопрос? Как преобразовать вывод Swift 3 readLine() в Integer?