Swift函数不接受变量

时间:2015-08-23 18:28:12

标签: ios swift function swift2

代码是用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)'

1 个答案:

答案 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方法;)