swift - 在 Swift 中返回另一个函数的函数

标签 swift function return

欧拉,

假设有一个名为fnOuter(name:String, mks:Double...) 的函数。我希望此函数返回另一个我可以单独编写的函数,如 fnInner(msg:String)->(String, Double, Double, Character)。如何做到这一点? 我是 Swift 的新手,尝试了以下方法。但最终它以 function 'std' was used as a property 结束;添加 () 调用它 由 Swift 编译器抛出。我在这里做错了什么?我该如何解决这个问题?或者这甚至可能吗?

func fnRetFn(name:String, mks:Double...) -> (() -> ((String, Double, Double, Character))){
    var msg = "Hello " + String(name) + "!"

    func calculate() -> (String, Double, Double, Character){
        var total:Double = 0.0
        var i: Double = 0.0
        for mk in mks{
            total += mk
            i += 1
        }

        var avg = total / i

        var grd : Character
        if avg >= 75.0{
            grd = "A"
        }

        else if avg >= 55.0{
            grd = "B"
        }

        else{
            grd = "F"
        } 

        return (msg, total, avg, grd)
    }

    return calculate
}

var outputFn = fnRetFn(name:"Mike", mks:75.3, 87.2)
var std = outputFn
print("\(std.0)")
print("\(std.1)")
print("\(std.2)")
print("\(std.3)")

编辑 1 请注意 fnInner(msg:String) 应该返回一个元组,而不是另一个函数

最佳答案

var outputFn = fnRetFn(name:"Mike", mks:75.3, 87.2)
var std = outputFn

outputFnstd 都是对同一个函数的引用 由 fnRetFn(...) 返回:

print(std) // (Function)

调用您必须附加参数列表的函数 在括号内。对于不带参数的函数 空列表 ():

var outputFn = fnRetFn(name:"Mike", mks:75.3, 87.2)
var std = outputFn()

现在 std 是调用“内部”函数返回的元组:

print(std) // ("Hello Mike!", 162.5, 81.25, "A")
print(std.0, std.1, std.2, std.3) // Hello Mike! 162.5 81.25 A

(与您的问题无关,但请注意,这两个变量都应该是用 let 声明的常量。)

关于swift - 在 Swift 中返回另一个函数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40606161/

相关文章:

swift - ViewController segue 和登录

ios - UILabel 上的 instrictContentSize 在不同的实例中返回不同的值

python - 当作为参数传递给函数时,哪些值会导致使用默认值?

javascript - 将一个对象结果传递给另一个对象函数,如链

c - 有效的多重返回值

ios - 使用 swift 发起 HTTP GET 请求

ios - 无法从 iOS 应用程序访问 Firebase 存储默认存储桶

javascript - 窗口滚动只调用一次 JS 函数

function - 使用功能在 flutter 中添加多个图像?

c# - 由于 '{method}' 返回 void,return 关键字后面不能跟对象表达式