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