![](/img/trans.png)
[英]Cannot convert value of type '() -> Void' to expected argument type '(() -> 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
作為參數是可行的。
所以有一些我不明白的地方,因為
Int
是Any
的子集嗎?
對。 但是,由於Int
是Any
的子集,因此期望Any
的閉包可以傳遞給Int
,而不是相反(這種強制轉換也不可能)。
想象一下,有可能將一個閉包Int
一個關閉,取Any
。 現在,用戶可以將除Int
之外的對象傳遞給閉包,使得類型檢查無關緊要。 這就是為什么不允許在這樣的閉包類型中進行轉換的原因。
您可以創建另一個調用myIntFunction
閉包,如下所示:
myAnyFunction(arg: {a -> Void in myIntFunction(a as! Int)})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.