簡體   English   中英

將函數作為參數傳遞錯誤:無法將類型“ someType.type”的值轉換為預期的參數類型“ someType”

[英]Passing functions as arguments error: Cannot convert value of type “someType.type” to expected argument type “someType”

我有一個函數,它將其他幾個函數用作參數:

class Iterator {
    func iterateItems(itemArray: [Items], removeItem: (Items) -> Void, addItem: (inout Items) -> Void, calculateEfficiency: () -> Void) -> [Items] {
        // function body
    }
}

我在其類的子類中這樣稱呼它:

class WPCalculator: Iterator {

    func removeWeaponItem(item: WeaponItems) { ... }
    func addWeaponItem(item: inout WeaponItems) { ... }
    func calcWeaponDamage() { ... }

    func iterateWPItems() {
        iterateItems(itemArray: WeaponItems.weaponItems, removeItem: removeWeaponItem(item: WeaponItems), addItem: addWeaponItem(item: &WeaponItems), calculateEfficiency: calcWeaponDemage())
   }
}

然后Xcode對removeItemaddItem參數說錯誤:

無法將類型“ WeaponItems.type”的值轉換為預期的參數類型“ WeaponItems”

而且WeaponItems類也是Items類的子類:

class WeaponItems: Items { ... }

為什么顯示該錯誤信息?

您正在傳遞類WeaponItems而不是類對象。 以下是更正確的版本:

func iterateWPItems() {
    let itemsToRemove = WeaponItems() //initialize object somehow
    var itemsToAdd = WeaponItems() //initialize object somehow
    iterateItems(itemArray: WeaponItems.weaponItems, removeItem: removeWeaponItem(item: itemsToRemove), addItem: addWeaponItem(item: &itemsToAdd), calculateEfficiency: calcWeaponDemage())
}

編輯 :對不起,我有你的問題。 比起調用這些方法,您應該僅將它們作為參數傳遞 ,這樣就不必在方法名稱的后面加上括號:

func iterateWPItems() {
    iterateItems(itemArray: WeaponItems.weaponItems, removeItem: removeWeaponItem, addItem: addWeaponItem, calculateEfficiency: calcWeaponDemage)
} 

在對iterateItems的調用中, removeWeaponItem(item: WeaponItems)WeaponItems是一種類型,因為它與類名WeaponItems相同。 如果您創建WeaponItems類型的變量,並用不同的名稱(例如,武器物品)而不是武器物品命名,則您可能不會遇到此問題。

我發現了問題:我將函數作為參數傳遞的方式是錯誤的,應該是這樣的:

func iterateWPItems() {
    iterateItems(itemArray: WeaponItems.weaponItems, removeItem: removeWeaponItem as! (Items) -> Void, addItem: addWeaponItem as! (inout Items) -> Void, calculateEfficiency: calcWeaponDemage())
}

暫無
暫無

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

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