当前位置: 首页 > 面试题库 >

快速覆盖二传手

乜华翰
2023-03-14
问题内容

我的二传手迅速遇到了一个奇怪的问题。我有带有代码的PlayingCard类:

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)

但是,当我从 等级西服 属性中删除setter和getter时,它工作正常,没有出现错误。

您能解释一下为什么出现此 EXC_BAD_ACCESS 错误吗?

谢谢您的帮助


问题答案:

通过写这个…

set(suit) {
    self.suit = suit
}

…引入无限循环,因为您是从设置器内部调用设置器的。

如果不计算您的属性,则应利用willSetdidSet通知者在属性更改之前/之后执行任何其他工作。

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



 类似资料:
  • 问题内容: 我知道这个答案已经以其他形式发布在这里,但是我想了解更多有关迅速覆盖实例变量的信息。 假设我有这段代码 好。从我读到的内容来看,常量需要覆盖前缀。其他答案说我应该声明setter和getter?为什么?我真的不在乎这两个。我只需要替换值即可。我真的不能使用重写,因为我是从UIView继承的,这可能很危险(我认为)。 任何建议都欢迎。 问题答案: 如您所说,您不能简单地在子类中重新定义常

  • 问题内容: 如果我上课: 我最初以为我可以通过添加扩展名来覆盖子类而无需子类化: 该代码不会编译,但错误说明了该函数,这很有意义。 我的问题是: 是否仍要重写特定类的功能?换句话说,在某些情况下,例如上面的示例中,我可以替换功能吗?如果没有,是否有其他解决方法或方法来实现该行为(可能声明了另一个协议,idk) 现在,我考虑得更多了,我不得不说这是不可能的,因为是什么阻止某人重写任何标准库函数? 问

  • 问题内容: 我下面有一个简单的课程 我在这里初始化 但是,这导致xcode打印出200 5s,然后由于EXC_BAD_ACCESS code = 2而崩溃。为什么会发生这种情况? 问题答案: @vadian在他的回答中提供了一个解决方案,它可以解决您的问题。让我解释一下发生了什么。 您已经创建了一个计算属性,即一个没有变量支持的属性,取而代之的是,getter和setter方法通常在另一个存储的属

  • 操作步骤: 菜单栏: Code —> Generate —> toString() 右键菜单: Generate —> toString() 快捷键: Mac: command + N Windows\/Linux: Alt + Insert —> toString()

  • 我想把线条图和标记的标签都标成红色。然而,这个传说并没有出现,因为它的情节占用了它的空间。 使现代化 原来我不能在 我使用以下方法使数字变大: 但是,现在图例中只有一个标签,标记显示在线形图上,而我更希望有两个:一个单独用于标记,另一个单独用于线条: 更新代码:

  • 我想在我的本地Artifactory实例上发布人工制品,使用带注释的Artifactory元数据,以及基于快照人工制品版本的时间戳的版本号。 为此,我尝试使用artifactory gradle插件和maven-publish插件。 如果我使用artifactory gradle插件,在发布给定人工制品的两个不同快照版本时,我会得到一个错误“没有足够的权限覆盖人工制品...”。 实际上,artif