簡體   English   中英

無法將'(Int) - > Void'類型的值轉換為預期的參數類型'(Any) - > Void'

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

我有兩個功能。 第一個是將Integer作為參數並且不返回任何內容:

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

第二個是使用類型(Any) -> Void的函數(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作為參數是可行的。

所以有一些我不明白的地方,因為IntAny的子集嗎?

對。 但是,由於IntAny的子集,因此期望Any的閉包可以傳遞給Int ,而不是相反(這種強制轉換也不可能)。

想象一下,有可能將一個閉包Int一個關閉,取Any 現在,用戶可以將除Int之外的對象傳遞給閉包,使得類型檢查無關緊要。 這就是為什么不允許在這樣的閉包類型中進行轉換的原因。

您可以創建另一個調用myIntFunction閉包,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM