Eu tenho a seguinte classe:
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }
}
A compilação falha com a mensagem:
O membro da instância 'categoriesPerPage' não pode ser usado no tipo 'ReportView'
O que isto significa?
swift
instantiation
getter-setter
computed-properties
Aderstedt
fonte
fonte
numPages
vez de um fechamento exclua o sinal de igual:var numPages: Int { return categoriesPerPage.count }
categoriesPerPage
é definida como emvar
vez delet
.Respostas:
Você apenas tem erro de sintaxe ao dizer
= {return self.someValue}
. o=
não é necessário.Usar :
se você quiser obter apenas você pode escrever
com a primeira maneira, você também pode adicionar observadores como
set
willSet
&didSet
permitindo usar
= operator
como setterfonte
categoriesPerPage
, que é uma matriz de 2 dim com av
qual é Int?set
exemplo, de curso não é possível atribuirint
para[int]
Para quem mais se deparar com isso, verifique se você não está tentando modificar a classe e não a instância! (a menos que você tenha declarado a variável como estática)
por exemplo.
fonte
static
variável einstance
variável,MyClass.variable
é válido se você declará-lo como variável estática (compartilhado entre todas as instâncias)Está dizendo que você tem uma variável de instância (o var só é visível / acessível quando você tem uma instância dessa classe) e está tentando usá-la no contexto de um escopo estático (método de classe).
Você pode tornar sua variável de instância uma variável de classe adicionando o atributo static / class.
Você instancia uma instância de sua classe e chama o método de instância nessa variável.
fonte
Outro exemplo é que você tem classe como:
você também receberá o mesmo tipo de erro como:
É porque você atribui seu método com a palavra-chave "class" (que torna seu método um método de tipo) e usando o seguinte:
mas quem definiu a variável playingSong antes? Está bem. Você não deve usar a palavra-chave da classe nesse caso:
Agora você está livre para ir.
fonte
Às vezes, o Xcode quando substitui métodos adiciona, em
class func
vez de apenasfunc
. Então, no método estático, você não pode ver as propriedades da instância. É muito fácil ignorar isso. Esse foi o meu caso.fonte
Seu problema inicial foi:
as postagens anteriores apontam corretamente, se você deseja uma propriedade computada , o
=
sinal está incorreto.Possibilidade adicional de erro:
Se sua intenção era "Definir um valor de propriedade padrão com um fechamento ou uma função" , você também precisará alterá-lo levemente. (Nota: este exemplo obviamente não tinha a intenção de fazer isso)
Em vez de remover o
=
, adicionamos()
para indicar um fechamento de inicialização padrão. (Isso pode ser útil ao inicializar o código da interface do usuário, para manter tudo em um só lugar.)No entanto, ocorre exatamente o mesmo erro :
O problema está tentando inicializar uma propriedade com o valor de outra. Uma solução é fazer o inicializador
lazy
. Não será executado até que o valor seja acessado.agora o compilador está feliz!
fonte
Eu continuava recebendo o mesmo erro, apesar de fazer a variável
static
. Solução: Limpar Compilação, Limpar Dados Derivados, Reiniciar o Xcode. Ou atalho Cmd + Shift + Alt + Kfonte
Caso alguém realmente precise de um fechamento como esse, isso pode ser feito da seguinte maneira:
fonte