gpt4 book ai didi

ios - 无法将类型 '(Int) -> Void' 的值转换为预期的参数类型 '(Any) -> Void'

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

我有两个功能。第一个是将 Integer 作为参数并且不返回任何内容:

func myIntFunction(_ arg: Int) -> Void {
print(arg)
}

第二个是将类型为 (Any) -> Void 的函数作为参数并且不返回任何内容:

func myAnyFunction(arg: @escaping (Any) -> Void) {
arg(5)
}

所以这里我显然没有捕获一些东西,因为 Int 是 Any 的子集,对吗?

所以如果我尝试使用这段代码:

myAnyFunction(arg: myIntFunction)

我得到一个编译错误:

Cannot convert value of type '(Int) -> Void' to expected argument type '(Any) -> Void'

以及将我的代码更改为的建议:

myAnyFunction(arg: myIntFunction as! (Any) -> Void)

但随后我收到运行时错误,因为 (Int) -> Void 无法转换为 (Any) -> Void

我没有得到什么?我想用一个方法/函数来请求 Any 类型的参数,给出一个 Integer 作为参数就可以了。

最佳答案

So there is something I am not catching here obviously as Int is a subset of Any right?

没错。但是,由于 IntAny 的子集,因此可以向期望 Any 的闭包传递 Int,但是反过来不行(这个转换也不可能)。

想象一下,可以将采用 Int 的闭包转换为采用 Any 的闭包。现在,用户可以将 Int 以外的对象传递给您的闭包,从而使类型检查变得无关紧要。这就是为什么不允许在这样的闭包类型之间进行强制转换。

您可以创建另一个调用 myIntFunction 的闭包,如下所示:

myAnyFunction(arg: {a -> Void in myIntFunction(a as! Int)})

关于ios - 无法将类型 '(Int) -> Void' 的值转换为预期的参数类型 '(Any) -> Void',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43882588/

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