实例成员不能用于types

我有以下class级:

class ReportView: NSView { var categoriesPerPage = [[Int]]() var numPages: Int = { return categoriesPerPage.count } } 

编译失败的消息:

实例成员“categoriesPerPage”不能用于“ReportView”types

这是什么意思?

= {return self.someValue}时,你只是有语法错误

使用 :

 var numPages: Int { get{ return categoriesPerPage.count } } 

如果你想得到只有你可以写

 var numPages: Int { return categoriesPerPage.count } 

第一种方法,你也可以添加观察者set willSetdidSet

 var numPages: Int { get{ return categoriesPerPage.count } set(v){ self.categoriesPerPage = v; } } 

允许使用= operator作为setter

 myObject.numPages = 5; 

对于任何人在这个绊倒确保你不试图修改类而不是实例! (除非你声明这个variables是静态的)

例如。

 MyClass.variable = 'Foo' // WRONG! - Instance member 'variable' cannot be used on type 'MyClass' instanceOfMyClass.variable = 'Foo' // Right! 

这是说你有一个实例variables(只有当你有一个类的实例时var才是可见的/可访问的),并且你正试图在静态作用域(类方法)的上下文中使用它。

你可以通过添加静态属性来让你的实例variables成为一个类variables。

你可以通过删除class属性来使你的类方法成为一个实例方法。

另一个例子是,你有类:

 @obc class Album: NSObject { let name:String let singer:Singer let artwork:URL let playingSong:Song // ... class func getCurrentlyPlayingSongLyric(duration: Int = 0) -> String { // ... return playingSong.lyric } } 

你也会得到相同types的错误,如:

 instance member x cannot be used on type x. 

这是因为你给你的方法分配了“class”关键字(这使得你的方法成为一个types方法),并使用如下所示:

 Album.getCurrentlyPlayingSongLyric(duration: 5) 

但是之前谁设置了playSongvariables? 好。 你不应该在这种情况下使用class关键字:

  // ... func getCurrentlyPlayingSongLyric(duration: Int = 0) -> String { // ... return playingSong.lyric } // ... 

现在你可以自由走了。