我在操场上有以下代码。 didSet观察者正在按预期工作。
struct itemStruct {
var name : String = "" {
didSet (newName) {
didSetNameTest(name)
}
}
}
func didSetNameTest (name : String) {
println("didSet itemStruct: \(name)")
}
var item = itemStruct()
item.name = "test"
如果我在一个类中移动代码,我会收到编译器错误:
class itemClass {
struct classItemStruct{
var name : String = "" {
didSet(newName) {
didSetClassNameTest(name)
}
}
}
func didSetClassNameTest(name:String) {
println("didSet itemClass: \(name)")
}
var structItem = classItemStruct()
}
var cItem = itemClass()
cItem.structItem.name = "Test"
错误:Cannot invoke 'didSelectClassNameTest' with an argument list of type '(String)'
。
所有代码都可以在游乐场中复制。
答案 0 :(得分:1)
由于内部类的实例独立于@ABakerSmith注释链接中描述的外部类的任何实例,因此可能的解决方法是将didSetClassNameTest函数设为private和static,然后静态调用它{{1} } on didSet方法
答案 1 :(得分:0)
内部类型与其外部类型无关。与java不同classItemStruct
对其外部类型itemClass
一无所知。