代码是用Swift 2.0编写的。我正在为部落冲突做一个小小的修补项目。我的代码如下。
enum Resource {
case gold
case elixer
case darkElixer
}
class Avatar {
var cost, health, damage, space: Int
var costType: Resource
init(damage: Int, health: Int, cost: Int, costType: Resource, space: Int){
self.damage = damage
self.health = health
self.cost = cost
self.costType = costType
self.space = space
}
}
class Barbarian: Avatar {
init() {
super.init(damage: 44, health: 110, cost: 200, costType: .elixer, space: 1)
}
}
class Archer: Avatar {
init() {
super.init(damage: 22, health: 44, cost: 400, costType: .elixer, space: 1)
}
}
我正在尝试这个功能。
func troopCost(troop: Avatar, quantity: Int) -> (Int, Resource){
let rResource = troop.costType
let rCost = troop.cost * quantity
return (rCost, rResource)
}
当我这样调用这个函数时。
troopCost(Barbarian, quantity: 2)
我收到此错误。
Cannon invoke 'troopCost' with an argument list of type '(Barbarian.Type, quantity: Int)'
答案 0 :(得分:4)
当你说troopCost(Barbarian, quantity: 2)
时,你试图将野蛮人类本身作为参数传递。
但您的功能需要Avatar
实例。所以你必须先创建一个实例。
let troop = Barbarian()
troopCost(troop, quantity: 2)
此外,您可以将troopCost
转换为Avatar
上的方法:
class Avatar {
// ...
func cost(quantity: Int) -> (Int, Resource) {
return (cost * quantity, costType)
}
}
let troop = Barbarian()
troop.cost(quantity: 2)
如果你将这些内容改为struct
而不是class
es,那么你就不必自己写出那个长init
方法;)