gpt4 book ai didi

swift - 在 swift 中使用函数

转载 作者:搜寻专家 更新时间:2023-11-01 06:11:34 25 4
gpt4 key购买 nike

我是编程新手。请告诉我这段代码有什么问题!为什么我得到输出“(函数)”?

//first function
func admit(person: String) -> String {
return("\(person) can go")
}
//second function
func deny(person: String) -> String {
return("\(person) can not go")
}
//third function
func screen(onGuestList: String, person: String) -> (String) -> String {
if onGuestList == "yes"{
return admit(person:)
} else {
return deny(person:)
}
}

var outcome = screen(onGuestList: "yes", person: "Sapinder")
print(outcome)

我期望输出“(person) can go”,但实际输出是“(Function)”。

最佳答案

Why am I getting the output "(Function)"?

因为 screen 函数返回 String,它返回 (String) -> String

简单地说,解决方法是将 screen 实现为:

func screen(onGuestList: String, person: String) -> String {
if onGuestList == "yes"{
return admit(person: person)
} else {
return deny(person: person)
}
}

那么这里有什么区别呢?好吧,现在首先它返回一个字符串,而不是一个接受一个字符串并返回一个字符串的函数。此外,要调用 admitdeny,您必须提及标签 (person) 以将参数传递给它们。


不相关提示:

func screen(onGuestList: String, person: String) -> String {    
return onGuestList == "yes" ? admit(person: person) : deny(person: person)
}

最好尝试将函数命名为动词而不是名词,我们通常对属性(字段)而不是方法(行为)这样做。例如:displayScreen 而不是 screen


那么返回(String) -> String是什么意思呢?

简而言之,Swift 确实允许这样的事情。考虑以下示例:

func sayHello() -> (String) -> String {
let functionToReturn: (String) -> String = { name in
return "Hello \(name)"
}

return functionToReturn
}

func takeMy(function: (String) -> String, name: String) {
print("I am about to print the function:")
print(function(name))
}

takeMy(function: sayHello(), name: "Sappie")
// I am about to print the function:
// Hello Sappie

如你所见,takeMy 函数是将另一个函数作为 (String) -> String 类型的参数,因此我们通过了 sayHello() 因为它的签名与参数类型匹配。

作为一个真实世界的例子,你会发现许多方法在处理集合时将参数作为函数(例如)。例如,filter 方法:

func returnMoreThanfive(element: Int) -> Bool {
return element > 5
}

let array = [1,2,3,4,5,6,7,8,9]

let filteredArray = array.filter(returnMoreThanfive)
// [6, 7, 8, 9]

我们向 filter 传递了一个接受元素并返回 bool 值的函数。请记住,这只是一个让您更清楚的示例,但是我们通常这样做:

let filteredArray = array.filter { $0 > 5 }

关于swift - 在 swift 中使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55611900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com