实例成员不能用于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 willSet & didSet 
 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 } // ... 
现在你可以自由走了。