![](/img/trans.png)
[英]Swift: cannot convert value of type 'SomeType<T>' to expected argument 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對removeItem
和addItem
參數說錯誤:
無法將類型“ 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.