Читайте также:
|
|
- Свойства и методы, которые мы создали до сих пор, свойства и методы означает, что каждый объект мы создаем из класса имеет свой собственный независимый набор данных и собственных независимых методов, которые действуют на этих данных на уровне экземпляра.Изменение в собственности одного экземпляра или вызове к способу одном случае не влияет на других. Но мы также можем определить уровень класса или, Свифт, то, что называется свойства типа и методы типа. Они принадлежат к самой типа, к нашему классу, а не к какой-либо одной инстанции этого класса.
Так вот пример. У меня есть упрощенное класс BankAccount, что я создал здесь, несколько кусочков данных, констант для AccountNumber и routingCode. Там это переменная для баланса и InterestRate и несколько простых методов, а также инициализации, ничего особенного обо всем этом. Так что я эту недвижимость здесь называют InterestRate. Это поплавок, и я даю ей значение литерала. Но давайте представим, что наши бизнес-правила таковы, что InterestRate должны быть одинаковыми для всех BankAccounts. Мы могли бы иметь сто тысяч экземпляров этого класса, но все они должны одни и те же InterestRate.
В любом случае, все они имеют его. Ну, я не хочу сотен тысяч отдельных экземпляров этой переменной, а если она изменяется, чтобы обновить его сто тысяч раз. Так что я могу сделать, это определить это как свойство типа так она работает на весь класс. Там только один из них, и она будет существовать для всего класса, имею ли я сто тысяч экземпляров или даже вообще ни одной. Так я делаю это уровень класса или тип недвижимости, просто добавив класс слово прямо перед вар. Теперь, как только я делаю это я буду бегать в одном вопросе здесь.
В то время я записываю это с конца бета-версии, я собираюсь видите это сообщение, что переменные класса не поддерживаются. Теперь, для меня, это говорит о том, что он, как ожидается, будет в состоянии сделать это. Это просто не поддерживается в моем текущей бета-версии. Так что если есть необходимость для вас, просто проверить, если вы можете добавить класс ключевое слово перед очередной хранимой собственности, потому что это не может быть проблема в то время вы смотрите этот курс. Тем не менее, я не застрял. Я на самом деле может сделать это прямо сейчас, пока это компьютерная собственности, а не хранить имущество.
Так что я собираюсь сделать быстрый изменения, которые вместо того, чтобы это равно 2,0, я просто добавить блок кода здесь и сказать ему, чтобы вернуться 2.0. Итак, мы имеем только для чтения, вычисленный здесь недвижимость, и теперь, когда ошибка не уходит. Теперь, когда у вас есть Тип недвижимости работающий на уровне класса, разница в том, что мы не используем имя экземпляра, чтобы справиться с этим. Мы используем имя самого класса, и мы работаем со свойствами на уровне экземпляра, нормальные свойства здесь, как AccountNumber, routingCode и баланса.
Ну, мне нужно иметь экземпляр этого класса для работы с ними. Так здесь внизу я создаю два экземпляра класса BankAccount, firstAccount и secondAccount. И, если я использую те, с точечный синтаксис, я могу получить доступ к свойству AccountNumber, имущество баланса, имущества routingCode. Я не вижу InterestRate, потому что он не работает на уровне экземпляра больше. Что мне нужно сделать, это использовать имя класса, BankAccount. и теперь я получаю доступ к InterestRate.
Я вижу на детской площадке, просто пишу это это возвращение 2,0. И что это, это тип недвижимости всегда доступны, даже если мы не имеем ни одного экземпляра вовсе этого класса. Так что, если я закомментировать эти два творения случаях здесь, мы не имеем каких-либо экземпляров этого класса, но это свойство по-прежнему доступны. Теперь мы можем также сделать то же самое с методом. Мы можем преобразовать метод работать на уровне экземпляра в плане работы на уровне класса, написав класс слов перед ней. Теперь, я бы не сделать это с методами, как вносить и снимать которые предназначены для работы на данных об уровне экземпляра.
Но если бы мне пришлось еще один способ, скажем, у меня есть функция, называемая пример, который просто делает линии оператор печати здесь. Я мог бы преобразовать это в уровне типа или метода класса уровня, просто писать класс слов впереди FUNC. Так что это теперь метод типа, и, как типа собственности до него мы получаем к нему, используя имя класса. Так что это BankAccount.example, а не какой-либо имя экземпляра этого. Одна важная вещь, потому что методы типа, где вы использовали слово класса перед ними, они работают от класса независимо от того, если у вас есть какие-либо экземпляры класса или нет, так что вы не можете обратиться к данным на уровне экземпляра внутри этого класса,
Любая попытка доступа нормальный экземпляр, которые хранятся свойства, как баланса или AccountNumber вызовет ошибку компиляции внутри этого метода. Хотя, вы можете обратиться к данным на уровне класса, что свойство InterestRate, что мы только что сделали, потому что это действительно работает на уровне класса. Так что я мог сказать, InterestRate является self.interestRate. Это полностью доступны на этом уровне, потому что это метод класса уровня. Теперь это правда, что большинство ваших свойств и методов будет на уровне экземпляра.
Они будут работать на этом уровне, но они приходят в очень полезно время от времени.
Дата добавления: 2015-08-20; просмотров: 166 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Using type properties and methods | | | Defining lazy properties |