swift - 如何解决这个涉及函数和选项的问题?
问题描述
我已经完成了第一部分,我需要关于第二个问题的帮助,该问题涉及更新函数以返回一个 Int。我试图解决它,但我得到的是一个错误
如果一个应用程序询问用户的年龄,这可能是因为该应用程序要求用户超过一定年龄才能使用它提供的某些服务。编写一个名为 checkAge 的函数,它接受一个 String 类型的参数。该函数应尝试将此参数转换为 Int 值,然后检查用户是否超过 18 岁。如果他/她足够大,打印“Welcome!”,否则打印“Sorry, but you are not old to use our app.” 如果 String 参数无法转换为 Int 值,则打印“Sorry, something wrong. Can you re-enter your age?” 调用该函数并将下面的 userInputAge 作为单个参数传入。然后调用该函数并传入一个可以转换为整数的字符串。
返回并更新您的函数以将年龄作为整数返回。你的函数总是返回一个值吗?确保您的退货类型准确反映了这一点。调用函数并打印返回值。
func checkage(age: String)->Int?
{
if let age_type = Int(age)
{
if age_type > 18 {
return "Welcome!"
}
else if age_type < 18 {
return"Sorry, but you aren't old enough to use our app."
}
}
else {
return "Sorry, something went wrong. Can you please re-enter your age?"
}
return age_type
}
print(checkage(age:"23"))
error: 3. Exercise - Functions and Optionals.xcplaygroundpage:20:12: error: use of unresolved identifier 'age_type'
return age_type
^~~~~~~~
解决方案
几个问题:
在您的方法中,看起来您正在返回字符串,但方法签名 (
checkage(age: String) -> Int?
) 表明您正在返回一个可选的整数值。Your
age_type
是一个非可选值,但您正在使用if let
,这是展开可选值的一种方式。不知道上面有什么。您的 age_type 声明小于或大于,但如果它完全相等,您会点击 else 块,表明有问题,但这正是年龄(假设它可以工作,但它不会)。
无论如何,这是我认为您正在尝试做的清理版本。
根据你最初写的声明,我认为你可能有也可能没有年龄,所以如果你没有,你想返回一个错误。有了这个假设,我将年龄参数设为可选(?)。该guard
语句检查是否有年龄,如果有,则将其解包,否则返回一个字符串,说明它已完成。
如果它通过了守卫,那么如果它超过 18,它返回“欢迎”字符串,否则返回错误。
func check(age: Int?) -> String {
guard let age = age else {
return "Sorry, something went wrong. Can you please re-enter your age?"
}
if age > 18 {
return "Welcome!"
} else {
return "Sorry, but you aren't old enough to use our app."
}
}
以下是各种范围的输出:
// Sorry, something went wrong. Can you please re-enter your age?
print(check(age: nil))
// Welcome!
print(check(age: 19))
// Sorry, but you aren't old enough to use our app.
print(check(age: 18))
此外,如果您正在编写一个函数来评估一个数字,它应该将一个数字作为参数。如果您从文本字段中获取数字,请在视图上执行从文本到字符串的转换。如果您使用文本字段来获取数字,请查找将文本字段中的输入限制为有效数字字符串的方法(您的提示是查找UITextFieldDelegate
方法。
推荐阅读
- jooq - JOOQ RDS Aurora MySQL 支持
- javascript - 从 Laravel 视图中将属性传入 Treeselect vue 组件
- c# - 如何在进入中断模式之前读取 Firebase 响应
- javascript - JavaScript split() join() 仅用于精确短语
- php - 使用 PHP 在数组中组合单词和数字
- angular - 不会触发向 FormArray 添加验证
- vue.js - VueJs Hackernews 2.0 中的 Sass 代替 Stylus
- java - ojdbc 可以通过 SOCKS 代理连接到 Oracle 数据库吗?
- git - 如果一个分支从未合并到 master 中,删除该分支是否也会从 repo 中删除其提交?
- vba - 如何复制包含附件的记录?