gpt4 book ai didi

ios - 如何将函数作为上下文参数传递?

转载 作者:可可西里 更新时间:2023-11-01 00:53:12 26 4
gpt4 key购买 nike

我想在上下文中传递一个委托(delegate)并尝试做这样的事情:

    func process(value: Float) -> Float {
return value * 999.9
}
-----------
self.pushControllerWithName("someController", context: [
"func": SomeUtils.process,
"someValue": 1
])

someController 中,我试图在 init 中做这样的事情:

var contextFunc = context as func
contextFunc(123)

这不起作用并给出错误:'AnyObject?'没有名为“Key”的成员

最佳答案

这很聪明,但是您遇到了几个微妙的类型问题。和往常一样,最大的罪魁祸首是 AnyAnyObject。您应该尽可能避免这些。

你的第一个问题是:

[
"func": SomeUtils.process,
"someValue": 1
]

它定义了一个 [String: Any],它不能被转换成一个 AnyObject。您不能将 Any(如 Float -> Float)桥接到 NSDictionary。您需要一个 AnyObject

您的第二个问题是您对 contextFunc 的使用与您传递的数据不一致。 context 不是 Float->Float。它是 [String:Any]。这可能只是您提问方式的错误。

那么怎么解决呢?您需要一个 AnyObject。最简单的 AnyObject 是什么?当然是对象:

class Context {
let f: Float -> Float
let value: Int
init(f: Float -> Float, value: Int) {
self.f = f
self.value = value
}
}

现在你可以只传递其中一个:

self.pushControllerWithName("someController", 
context: Context(f: SomeUtils.process, value: 1))

你可以这样卸载它:

if let context = context as? Context {
let contextFunc = context.f
let result = contextFunc(123)
}

关于ios - 如何将函数作为上下文参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29459216/

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