swift - 在 Swift 函数中返回任意类型的对象

标签 swift swift-playground swiftype

我想从函数返回一个函数或一个值,可以是 Int 或 String 或 Swift 中的其他类型。可以代表所有这些的类型是什么?

由于 autoCurry 函数中的这一行,以下代码引发错误 return self.autoCurry(function, params, numArgs: argsRemaining)

class $ {


    class func curry<P, T>(function: (P...) -> T, _ parameters: (P[])) -> ((P...) -> Any?) {
        return {
            (curryParams: P...) -> Any? in
            var params:P[] = []
            return function(reinterpretCast(parameters + curryParams))
        }
    }

    class func autoCurry<P, T>(function: (P...) -> T, _ parameters: (P[]), numArgs: Int) -> ((P...) -> Any?) {
        let funcParams: P[] = []
        let funcRef = { (curryParams: P...) -> Any? in
            if curryParams.count < numArgs {
                let argsRemaining = numArgs - curryParams.count
                let params = parameters + curryParams
                return self.autoCurry(function, params, numArgs: argsRemaining)
            } else {
                return function(reinterpretCast(curryParams))
            }
        }
        return funcRef
    }
}

最佳答案

没有涵盖函数的 Swift 类型。这两种“通用”类型明确排除函数。

“Swift provides two special type aliases for working with non-specific types:

  AnyObject can represent an instance of any class type.
  Any can represent an instance of any type at all, apart from function types.”


Excerpt From: Apple Inc. “The Swift Programming Language.”
  iBooks. https://itun.es/us/jEUH0.l

因此您无法指定可以涵盖函数和任何其他类型的返回类型。

旁注:您实际上并没有执行“柯里化(Currying)”操作,而是执行“部分函数应用程序”。柯里化(Currying)内置于 Swift 中。

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

相关文章:

ember.js - 在 Ember.JS 中绑定(bind) HTML 字符串

swift - 以快速奇怪的行为将函数分配给变量

swift - Swift Playground 中的空类给出 __lldb_expr_ 错误

elasticsearch - 超过 SwifType 速率限制

swift - 添加的 subview 位置稍微偏离 - 我怎样才能把它放回原位?

swift - UISlider 添加目标操作不起作用

swift - Xcode 9.4 Playground Swift 控制台输出

ios - 如何将 uiview 分成两个 triangleview 并快速点击这两个 trainge

swift - 手动修改 Vapor 4 响应中的模型属性值