gpt4 book ai didi

ios - 在 Swift 中覆盖子类中的属性的正确方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 05:36:09 24 4
gpt4 key购买 nike

我也偶然发现了这个问题,然而,没有明确的答案

"Ambiguous use of 'propertyName'" error given overridden property with didSet observer

问题:我想覆盖子类中的属性。

让我用一个例子来说明这个问题:

我有一个名为 A 的类及其一个名为 B 的子类。

A类

class A {

var someStoredProperty : Int?

}

B 类

class B : A{

override var someStoredProperty : Int?{

willSet{

//add to superclass's setter
someStoredProperty = newValue! + 10
}

}

}

一旦我尝试设置 B 的继承属性

var b = B()
b.someStoredValue = 10 // Ambiguous use of someStoredProperty

编译器告诉我

someStoredProperty 的使用不明确

这是为什么呢?

更新

class TableViewRow{

typealias ClickAction = (tableView:UITableView, indexPath:NSIndexPath) -> Void
var clickAction : ClickAction?
}

class SwitchTableViewRow: TableViewRow {

override var clickAction : ClickAction? {

didSet{

//override setter
}

}

}

用法:

var switchRow = SwitchTableViewRow()
switchRow.clickAction = {
//^
//|
//|
//ambiguous use of clickAction
[unowned self, unowned switchRow] (tableView: UITableView, indexPath: NSIndexPath) in

//do something

}

最佳答案

我在 6.1 中没有遇到这个错误,但潜在的问题是这里有一个无限循环。你的意思是:

// This is wrong, but what you meant
override var someStoredProperty: Int? {
willSet {
super.someStoredProperty = newValue! + 10
}
}

注意 super。 (这是我强烈建议在属性上使用 self. 的另一个原因,以明确何时存在这些无限循环。)

但是这段代码是没有意义的。在 setter 之前,您将值设置为 x + 10。然后将值设置为 x。你真正的意思是:

override var someStoredProperty: Int? {
didSet {
if let value = someStoredProperty {
super.someStoredProperty = value + 10
}
}
}

关于ios - 在 Swift 中覆盖子类中的属性的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com