在swift中覆盖一个setter

前端之家收集整理的这篇文章主要介绍了在swift中覆盖一个setter前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在swift中遇到了一个奇怪的问题.我有类PlayCard的代码
  1. var rank: NSInteger {
  2. get{
  3. return self.rank
  4. }
  5. set(rank){
  6. self.rank = rank
  7. }
  8. }
  9.  
  10. var suit: NSString {
  11. get{
  12. return self.suit
  13. }
  14. set(suit){
  15. self.suit = suit
  16. }
  17. }
  18.  
  19. init(suit: NSString,rank: NSInteger) {
  20. super.init()
  21. self.suit = suit
  22. self.rank = rank
  23. }

我在另一个类中使用此init()方法,实现如下所示:

  1. init() {
  2. super.init(cards: [])
  3. for suit in PlayingCrad.validSuit() {
  4. var rank: Int = 0
  5. for rank; rank <= PlayingCrad.maxRank(); rank++ {
  6. var card = PlayingCrad(suit: suit,rank: rank)
  7. addCard(card)
  8. }
  9. }
  10. }

代码看起来像上面我有一个错误

  1. self.suit = suit
  2.  
  3. EXC_BAD_ACCESS(code=2,adress=0x7fff5c4fbff8)

但是当我从rank和suit属性删除了setter和getter时,它工作得很好,没有出现任何错误.

你能解释一下为什么会出现这个EXC_BAD_ACCESS错误吗?

感谢您的帮助

写这个……
  1. set(suit) {
  2. self.suit = suit
  3. }

…你引入了一个无限循环,因为你从setter中调用了setter.

如果您的属性未计算,则应该利用willSet和didSet通知程序在属性更改之前/之后执行任何其他工作.

顺便说一句,你也应该删除te getter.访问该属性时,它将导致另一个无限循环.

猜你在找的Swift相关文章