Swift重写类func

时间:2015-03-26 15:16:44

标签: ios class swift static

很容易在Swift中覆盖一个方法:

class A {
   func innerValue() -> Int { return 5 }
   func getInnerValue() -> Int { return innerValue() }
}

class B: A {
   override func innerValue() -> Int { return 8 }
}

B().getInnerValue() //returns 8

但是当我将innerValue()声明为 static (使用class关键字)时,我不知道如何做同样的事情:

class A {
   class func innerValue() -> Int { return 5 }
   func getInnerValue() -> Int {
      return A.innerValue() //ok for compiler but returns 5 instead of 8
      return self.innerValue() //error: 'A' doesn't have a member named 'innerValue'
      return innerValue() //error: Use of unresolved identifier 'innerValue'
   }
}

class B: A {
   override class func innerValue() -> Int { return 8 }
}

B().getInnerValue()

Swift可以吗?

1 个答案:

答案 0 :(得分:8)

return A.innerValue() //ok for compiler but returns 5 instead of 8

从您的评论中,听起来您想要做的是以多态方式引用当前实例的类。如果这是您想要的,请不要将innerValue()消息发送给A;这仅表示A。并且不要将它发送到self,因为你写这个的方式,getInnerValue是一个实例方法,而你想要调用的是一个类方法。将其发送到self.dynamicType,即当前实例的类。