У меня есть следующий класс:
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }
}
Компиляция завершается с сообщением:
Элемент экземпляра categoryPerPage нельзя использовать для типа ReportView
Что это значит?
numPages
а не замыкание, удалите знак равенства:var numPages: Int { return categoriesPerPage.count }
categoriesPerPage
она определена какvar
вместоlet
.Ответы:
У вас просто есть синтаксическая ошибка при произнесении
= {return self.someValue}
.=
Не требуется.Используйте:
если хочешь получить только можешь написать
первым способом вы также можете добавить наблюдателей как
set
willSet
&didSet
позволяет использовать
= operator
в качестве сеттераисточник
categoriesPerPage
, который является 2-димным массивом сv
Int?set
пример, из-конечно , вы не можете назначитьint
в[int]
Для всех, кто сталкивается с этим, убедитесь, что вы не пытаетесь изменить класс, а не экземпляр! (если вы не объявили переменную как статическую)
например.
источник
static
переменной иinstance
переменной,MyClass.variable
она действительна, если вы объявите ее как статическую переменную (общую для всех экземпляров)Это говорит о том, что у вас есть переменная экземпляра (переменная видна / доступна только тогда, когда у вас есть экземпляр этого класса), и вы пытаетесь использовать ее в контексте статической области (метод класса).
Вы можете сделать переменную вашего экземпляра переменной класса, добавив статический атрибут / атрибут класса.
Вы создаете экземпляр своего класса и вызываете метод экземпляра для этой переменной.
источник
Другой пример, у вас есть класс, как:
вы также получите такой же тип ошибки, как:
Это потому, что вы присваиваете свой метод с ключевым словом «class» (что делает ваш метод методом типа) и используете like:
но кто устанавливал переменную playingSong раньше? Хорошо. Вы не должны использовать ключевое слово класса для этого случая:
Теперь вы можете идти.
источник
Иногда Xcode при переопределении методов добавляет
class func
вместо простоfunc
. Тогда в статическом методе вы не можете видеть свойства экземпляра. Это очень легко не заметить. Это был мой случай.источник
Ваша начальная проблема была:
предыдущие сообщения правильно указывают, если вы хотите вычисляемое свойство ,
=
знак ошибочный.Дополнительная возможность для ошибки:
Если вы намеревались «Задать значение свойства по умолчанию с помощью замыкания или функции» , вам нужно лишь немного его изменить. (Примечание: этот пример явно не предназначен для этого)
Вместо удаления
=
добавляем()
обозначение закрытия инициализации по умолчанию. (Это может быть полезно при инициализации кода пользовательского интерфейса, чтобы хранить все это в одном месте.)Тем не менее, точно такая же ошибка возникает:
Проблема заключается в попытке инициализировать одно свойство значением другого. Одним из решений является создание инициализатора
lazy
. Это не будет выполнено, пока значение не получено.теперь компилятор доволен!
источник
Я продолжал получать ту же ошибку, несмотря на создание переменной
static
. Решение: очистить сборку, очистить производные данные, перезапустить Xcode. Или сочетание клавиш Cmd + Shift + Alt + Kисточник
На тот случай, если кому-то действительно нужно подобное закрытие , это можно сделать следующим образом:
источник