the*_*tic 10 inheritance overriding properties ios swift
我也偶然发现了这个问题,但没有明确的答案
问题:我想覆盖子类中的属性.
让我用一个例子说明问题:
我有一个叫做的类A和一个叫它的子类B.
class A {
var someStoredProperty : Int?
}
Run Code Online (Sandbox Code Playgroud)
class B : A{
override var someStoredProperty : Int?{
willSet{
//add to superclass's setter
someStoredProperty = newValue! + 10
}
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我尝试设置继承属性 B
var b = B()
b.someStoredValue = 10 // Ambiguous use of someStoredProperty
Run Code Online (Sandbox Code Playgroud)
编译告诉我
Ambiguous use of someStoredProperty
这是为什么 ?
class TableViewRow{
typealias ClickAction = (tableView:UITableView, indexPath:NSIndexPath) -> Void
var clickAction : ClickAction?
}
class SwitchTableViewRow: TableViewRow {
override var clickAction : ClickAction? {
didSet{
//override setter
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var switchRow = SwitchTableViewRow()
switchRow.clickAction = {
//^
//|
//|
//ambiguous use of clickAction
[unowned self, unowned switchRow] (tableView: UITableView, indexPath: NSIndexPath) in
//do something
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*ier 12
我在6.1中没有得到那个错误,但潜在的问题是你在这里有一个无限循环.你的意思是:
// This is wrong, but what you meant
override var someStoredProperty: Int? {
willSet {
super.someStoredProperty = newValue! + 10
}
}
Run Code Online (Sandbox Code Playgroud)
请注意super.(这是我强烈建议self.在属性上使用的另一个原因,以便在存在这些无限循环时明确.)
但是这段代码毫无意义.在设置器之前,将值设置为x + 10.然后将值设置为x.你真正的意思是:
override var someStoredProperty: Int? {
didSet {
if let value = someStoredProperty {
super.someStoredProperty = value + 10
}
}
}
Run Code Online (Sandbox Code Playgroud)