Каково использование ключевого слова "static", если ключевое слово "let" используется для определения констант/неизменных в swift?
Я немного запутался в использовании статического ключевого слова в swift. Как мы знаем, swift вводит ключевое слово let для объявления неизменяемых объектов. Как объявление идентификатора ячейки таблицы, которая, скорее всего, не изменится в течение всего срока ее службы. Теперь о том, что используется ключевое слово static в некотором объявлении struct like:
struct classConstants
{
static let test = "test"
static var totalCount = 0
}
тогда как ключевое слово let делает то же самое. В Objective C мы использовали static для объявления некоторой константы, например
static NSString *[email protected]"cellId";
Кроме того, мне любопытно использовать ключевое слово static, а также let, а также var. Может ли кто-нибудь объяснить мне, где использовать это статическое ключевое слово? Что еще более важно, нам действительно нужно static в swift?
Ответы
Ответ 1
Я сломаю их для вас:
-
var
: используется для создания переменной -
let
: используется для создания константы -
static
: используется для создания свойств типа с помощью let
или var
. Они распределяются между всеми объектами класса.
Теперь вы можете комбинировать, чтобы получить желаемый результат:
-
static let key = "API_KEY"
: постоянное свойство типа -
static var cnt = 0
: свойство типа, которое является переменной -
let id = 0
: постоянная (может быть назначена только один раз, но может быть назначена во время выполнения) - переменная
var price = 0
: переменная
Таким образом, чтобы подвести итог все var и позволить определить изменчивость в то время как статические и отсутствие определения области. Вы можете использовать static var
чтобы отслеживать, сколько экземпляров вы создали, в то время как вы можете использовать просто var
для цены, которая отличается от объекта к объекту. Надеюсь, это немного прояснит ситуацию.
Пример кода:
class MyClass{
static let typeProperty = "API_KEY"
static var instancesOfMyClass = 0
var price = 9.99
let id = 5
}
let obj = MyClass()
obj.price // 9.99
obj.id // 5
MyClass.typeProperty // "API_KEY"
MyClass.instancesOfMyClass // 0
Ответ 2
Статическая переменная используется во всех экземплярах класса. Добавьте этот пример в детскую площадку:
class Vehicle {
var car = "Lexus"
static var suv = "Jeep"
}
// changing nonstatic variable
Vehicle().car // Lexus
Vehicle().car = "Mercedes"
Vehicle().car // Lexus
// changing static variable
Vehicle.suv // Jeep
Vehicle.suv = "Hummer"
Vehicle.suv // Hummer
Когда вы изменяете переменную для статического свойства, это свойство теперь изменяется во всех будущих экземплярах.
Ответ 3
Статические переменные относятся к типу, а не к экземпляру класса. Вы можете получить доступ к статической переменной, используя полное имя типа.
код:
class IOS {
var iosStoredTypeProperty = "iOS Developer"
static var swiftStoredTypeProperty = "Swift Developer"
}
//Access the iosStoredTypeProperty by way of creating instance of IOS Class
let iOSObj = IOS()
print(iOSObj.iosStoredTypeProperty) // iOS Developer
//print(iOSObj.swiftStoredTypeProperty)
//Xcode shows the error
//"static member 'swiftStoredTypeProperty' cannot be used on instance of type IOS"
//You can access the static property by using full name of the type
print(IOS.swiftStoredTypeProperty) // Swift Developer
Надеюсь, это поможет вам.
Ответ 4
"Ключевое слово let определяет константу" запутанно для новичков, которые исходят из фона С# (например, меня). В терминах С# вы можете думать о "let" как переменной "readonly" .
(ответ на Как именно ключевое слово "let" работает в Swift?)
Используйте static
и let
для определения константы
public static let pi = 3.1416 // swift
public const double pi = 3.1416; // C#
public static final double pi = 3.1416 // Java
Когда я использую let
для определения константы, мне кажется, что я использую readonly
для С#. Поэтому я использую как static
, так и let
для определения константы в swift.
Ответ 5
чтобы увидеть разницу между свойствами типа и/или методами, а также свойствами класса и/или методами, просмотрите этот пояснительный пример из apple docs
class SomeClass {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 27
}
class var overrideableComputedTypeProperty: Int {
return 107
}
}
Статические свойства могут быть объявлены только по типу, а не по всему миру. Другими словами, свойство static свойство === type в Swift. Чтобы объявить свойство type, вы должны использовать статическое ключевое слово.
Ответ 6
Не путай себя
Позвольте мне привести пример в реальном времени
class bowl{
static var meatball=4
init(){}
}
var hungrydog=bowl() // dog is hungry , meatball is served
var hungrycat=bowl() // cat is hungry , meatball is served
// if pets are not obeying any words we can punish them by serving less
bowl.meatball=2