Ios 在didSet中调用函数在类中不起作用

Ios 在didSet中调用函数在类中不起作用,ios,swift,Ios,Swift,我有以下代码在操场上工作。didSet观察员正在按预期工作 struct itemStruct { var name : String = "" { didSet (newName) { didSetNameTest(name) } } } func didSetNameTest (name : String) { println("didSet itemStruct: \(name)") } var item = itemStruct() item.n

我有以下代码在操场上工作。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"
错误:
无法使用类型为“(字符串)”的参数列表调用“didSelectClassNameTest”


所有代码都可以在操场上复制。

由于内部类的实例独立于外部类的任何实例,如@ABakerSmith注释链接中所述,因此可能的解决方法是将didSetClassNameTest函数设为私有和静态,然后静态调用它
itemClass.didSetClassNameTest(name)
关于didSet方法

内部类型独立于外部类型。与java中的不同,classItemStruct对其外部类型一无所知
itemClass

您看过了吗。内部类型的实例似乎独立于外部类型的任何实例。向didSetClassNameTest添加static可修复此错误