传递函数作为参数错误:无法将类型“someType.type”预期参数类型“SOMETYPE”
的价值我有一个功能,这需要其他几个功能参数:传递函数作为参数错误:无法将类型“someType.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
参数错误:
Cannot convert value of type "WeaponItems.type" to expected argument 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)
}
我想传递函数('removeWeaponItem','addWeaponItem'和'calculateEfficiency')作为参数,所以你的建议答案是好的,但它不是解决方案 –
是的,你是对的,我只是意识到它,谢谢! –
在您调用iterateItems的过程中,removeWeaponItem(item: WeaponItems)
,WeaponItems
是一种类型,因为它与类名称WeaponItems
相同。如果您创建WeaponItems类型的变量,并将它们命名为不同(例如weaponItems)而不是WeaponItems,那么您可能不会遇到此问题。
我是否创建了任何名为'WeaponItems'的变量? –
观察调用iterateItems: FUNC iterateWPItems(){ iterateItems(itemArray:WeaponItems.weaponItems,的removeItem:removeWeaponItem(项目:WeaponItems)的addItem:addWeaponItem(项目:&WeaponItems),calculateEfficiency:calcWeaponDemage()) } –
有一个'WeaponItems.weaponItems',它是类WeaponItems的变量,而不是类本身。顺便说一句,我的代码似乎有更多的错别字,哎呀,我再次更新。 –
我发现这个问题:我通过了方式函数作为参数是错误的,它应该是这样的:
func iterateWPItems() {
iterateItems(itemArray: WeaponItems.weaponItems, removeItem: removeWeaponItem as! (Items) -> Void, addItem: addWeaponItem as! (inout Items) -> Void, calculateEfficiency: calcWeaponDemage())
}
是的,就是这样,'calcWeaponDemage'最后不应该有括号。 – slashdot
你能生成更多的代码吗?我将上面的源代码剪切并粘贴到操场上。没有足够的上下文。也许你不应该在你调用removeItem和addItem的时候把变量'WeaponItems'命名为类名WeaponItems'。 –
代码中出现了一些拼写错误,对于混淆抱歉,我更新了它。我会看看我是否可以添加一些代码。 –