В чем разница между "пусть" и "статическим пусть"?

class Foo {
    let fooValue = 1
}

print(Foo.fooValue) // not work


class Bar {
    static let barValue = 1
}

print(Bar.barValue) // work; print "1"

Зачем? Я ожидал что Foo пример для работы, потому что значение fooValue является константой, значение и адрес памяти известны во время компиляции. Но мне нужно использовать ключевое слово static работать.

2 ответа

Решение

fooValue это свойство экземпляра. Там один отдельный fooValue за каждый экземпляр (объект) Foo учебный класс.

barValue является статическим свойством. Там один поделился barValue что принадлежит классу.

Вот более конкретный пример. Предположим, у меня был этот класс:

class Human {
    static let numberOfLimbs = 4
    let name: String
}

Что бы вы ожидали, если бы я спросил вас, как зовут Человека? Т.е. Human.name, Ну, ты не сможешь мне ответить, потому что нет единого имени из всех людей. У каждого человека будет отдельное имя. Вы могли бы, однако, сказать мне количество конечностей людей, (Human.numberOfLimbs), что (почти) всегда 4.

Вам не нужно создавать экземпляр своего класса для доступа к статическим свойствам

если вы хотите получить к нему доступ в вашем первом классе использования

Foo().fooValue

как правило, вы хотите использовать static для свойств, к которым вы хотите получить доступ без необходимости каждый раз создавать экземпляр объекта

Другие вопросы по тегам