调用didSet中的函数不在类中工作

时间:2015-06-02 16:09:38

标签: ios swift

我在操场上有以下代码。 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)'

所有代码都可以在游乐场中复制。

2 个答案:

答案 0 :(得分:1)

由于内部类的实例独立于@ABakerSmith注释链接中描述的外部类的任何实例,因此可能的解决方法是将didSetClassNameTest函数设为private和static,然后静态调用它{{1} } on didSet方法

答案 1 :(得分:0)

内部类型与其外部类型无关。与java不同classItemStruct对其外部类型itemClass一无所知。