struct 服务器经验倍数 {
var 开启 = false
var 倍数 = 0
}
class 人民币玩家 {
var 经验值 = 0
var 服倍数 = 服务器经验倍数()
func 挂机经验() {
经验值 += 200
}
func 打怪经验(怪物经验值: Int, 经验倍数: Int) {
经验值 += (怪物经验值 * 经验倍数)
if 服倍数.开启 && 服倍数.倍数 > 1 {
经验值 *= self.服倍数.倍数
}
}
}
请问一下在这段代码中最后的那个self,我百度查了一下,self是代表实例本身,在我这段代码中代表的就是“人民币玩家”,为什么我把self改成“人民币玩家”后是不行的呢?
var 人民币玩家1 = 人名币玩家()
//人民币玩家1就是类的实例
人民币玩家是类名,并不是类的实例
self就是类创建实例后,用实例调用方法,self就指的是调用方法的实例
因为 func 打怪经验 是实例方法,因此在该func中的self指代的是执行该func的实例对象(object),而“人民币玩家”是这个类型(class)。所以此处指代不同。
而,另外一个情况下: 在类方法(静态方法)(由关键字class或者关键字static修饰的的func)中,self指代的是该方法的类(class),则这种假设的情况下,self和"人民币玩家"指代相同