加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在swift中覆盖一个setter

发布时间:2020-12-14 05:46:38 所属栏目:百科 来源:网络整理
导读:我在swift中遇到了一个奇怪的问题.我有类PlayCard的代码: var rank: NSInteger { get{ return self.rank } set(rank){ self.rank = rank }}var suit: NSString { get{ return self.suit } set(suit){ self.suit = suit }}init(suit: NSString,rank: NSInteg
我在swift中遇到了一个奇怪的问题.我有类PlayCard的代码:
var rank: NSInteger {
    get{
        return self.rank
    }
    set(rank){
        self.rank = rank
    }
}

var suit: NSString {
    get{
        return self.suit
    }
    set(suit){
        self.suit = suit
    }
}

init(suit: NSString,rank: NSInteger) {
    super.init()
    self.suit = suit
    self.rank = rank
}

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

init() {
    super.init(cards: [])
    for suit in PlayingCrad.validSuit() {
        var rank: Int = 0
        for rank; rank <= PlayingCrad.maxRank(); rank++ {
            var card = PlayingCrad(suit: suit,rank: rank)
            addCard(card)
        }
    }
}

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

self.suit = suit

EXC_BAD_ACCESS(code=2,adress=0x7fff5c4fbff8)

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

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

感谢您的帮助

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读