如何解决涉及功能和可选项的问题?

时间:2019-08-01 02:20:47

标签: swift optional

我已经完成了第一部分,我需要第二个问题的帮助,该问题涉及更新函数以返回Int。我试图解决它,但是我得到的是一个错误

  

如果应用要求用户的年龄,则可能是因为该应用要求用户超过一定年龄才能使用其提供的某些服务。编写一个名为checkAge的函数,该函数采用String类型的一个参数。该函数应尝试将此参数转换为Int值,然后检查用户是否超过18岁。如果他/她足够大,请打印“欢迎!”,否则请打印“对不起,但您还不够大,无法使用我们的应用程序。”如果无法将String参数转换为Int值,请打印“抱歉,出了点问题。请您重新输入您的年龄吗?”调用该函数并将下面的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
^~~~~~~~

1 个答案:

答案 0 :(得分:1)

几个问题:

  1. 在您的方法内部,好像您正在返回字符串,但是方法签名(checkage(age: String) -> Int?)表示您正在返回一个可选的整数值。

  2. 您的age_type是非可选值,但是您使用的是if let,这是拆开可选项的一种方法。不知道那里有什么。

  3. 您的age_type声明小于或大于,但是如果它完全相等,则您将击中else块,表明出了点问题,但这恰好是年龄(假设它将起作用,它将不会t)。

无论如何,这是我试图做的事情的整理版本。

根据您最初写的声明,我认为您可能有年龄,也可能没有年龄,因此如果您没有年龄,您想返回一个错误。在这种假设下,我将age参数设为可选(?)。 guard语句检查是否有年龄,如果有年龄,则将其解包,否则将返回一个字符串,表示已加满标签。

如果超过警戒线,则超过18岁,则返回“ Welcome”字符串,否则返回错误。

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

此外,如果要编写函数以求数字,则应以数字为参数。如果要从textField获取数字,请在视图上进行从文本到字符串的转换。如果您使用文本字段获取数字,请查找将文本字段中的输入限制为有效数字字符串的方法(您的提示是查找UITextFieldDelegate方法。