Tengo la siguiente clase:
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }
}
La compilación falla con el mensaje:
El miembro de instancia 'categoriesPerPage' no se puede usar en el tipo 'ReportView'
¿Qué significa esto?
swift
instantiation
getter-setter
computed-properties
Aderstedt
fuente
fuente
numPages
lugar de un cierre, elimine el signo igual:var numPages: Int { return categoriesPerPage.count }
categoriesPerPage
se define como envar
lugar delet
.Respuestas:
Solo tienes un error de sintaxis al decir
= {return self.someValue}
. El=
no es necesario.Utilizar :
si quieres obtener solo puedes escribir
con la primera forma también puedes agregar observadores como
set
willSet
&didSet
permitiendo usar
= operator
como setterfuente
categoriesPerPage
, que es una matriz de 2 dim conv
cuál es Int?set
ejemplo, de curso no se puede asignarint
en[int]
¡Para cualquier otra persona que se encuentre con esto, asegúrese de no intentar modificar la clase en lugar de la instancia! (a menos que haya declarado la variable como estática)
p.ej.
fuente
static
variable yinstance
variable,MyClass.variable
es válida si la declaras como variable estática (compartida entre todas las instancias)Está diciendo que tiene una variable de instancia (la var solo es visible / accesible cuando tiene una instancia de esa clase) y está tratando de usarla en el contexto de un ámbito estático (método de clase).
Puede convertir su variable de instancia en una variable de clase agregando atributos estáticos / de clase.
Instancia una instancia de su clase y llama al método de instancia en esa variable.
fuente
Otro ejemplo es que tienes una clase como:
también obtendrá el mismo tipo de error como:
Es porque asigna su método con la palabra clave "class" (que hace que su método sea un método de tipo) y usa like:
¿Pero quién estableció la variable playingSong antes? Okay. No debe usar la palabra clave de clase para ese caso:
Ahora eres libre de irte.
fuente
A veces, Xcode cuando anula los métodos agrega en
class func
lugar de solofunc
. Luego, en el método estático, no puede ver las propiedades de la instancia. Es muy fácil pasarlo por alto. Ese fue mi caso.fuente
Su problema inicial fue:
las publicaciones anteriores señalan correctamente, si desea una propiedad calculada , el
=
signo es erróneo.Posibilidad adicional de error:
Si su intención era "Establecer un valor de propiedad predeterminado con un cierre o función" , también necesita cambiarlo ligeramente. (Nota: este ejemplo obviamente no estaba destinado a hacer eso)
En lugar de eliminar el
=
, agregamos()
para denotar un cierre de inicialización predeterminado. (Esto puede ser útil al inicializar el código de la interfaz de usuario, para mantenerlo todo en un solo lugar).Sin embargo, se produce exactamente el mismo error :
El problema está tratando de inicializar una propiedad con el valor de otra. Una solución es hacer el inicializador
lazy
. No se ejecutará hasta que se acceda al valor.¡ahora el compilador está feliz!
fuente
Seguí recibiendo el mismo error a pesar de hacer la variable
static
. Solución: construcción limpia, datos derivados limpios, reinicio de Xcode. O atajo Cmd + Shift + Alt + Kfuente
En caso de que alguien realmente necesite un cierre así, se puede hacer de la siguiente manera:
fuente