Na czym polega użycie słowa kluczowego "static", jeśli słowo kluczowe" let " używane do definiowania stałych/niezmiennych w języku swift?
Jestem trochę zdezorientowany używaniem static słowa kluczowego w języku swift. Jak wiemy swift wprowadza słowo kluczowe let do deklarowania obiektów niezmiennych. Jak zadeklarowanie id komórki widoku tabeli, która najprawdopodobniej nie zmieni się w trakcie życia. Jakie jest użycie słowa kluczowego static w jakiejś deklaracji struktury jak:
struct classConstants
{
static let test = "test"
static var totalCount = 0
}
Natomiast let keyword do same.In Objective C użyliśmy static do zadeklarowania jakiejś stałej jak
static NSString *cellIdentifier=@"cellId";
Poza tym, co sprawia, że bardziej mnie ciekawi użycie słowa kluczowego static wraz z let a także var . Czy ktoś może mi wyjaśnić, gdzie użyć tego statycznego słowa kluczowego? Co ważniejsze, czy naprawdę potrzebujemy static W swift?
5 answers
Złamię je dla Ciebie:
-
var
: używane do tworzenia zmiennej -
let
: używane do tworzenia stałej -
static
: używane do tworzenia właściwości typu zlet
lubvar
. Są one współdzielone między wszystkimi obiektami klasy.
Teraz możesz połączyć, aby uzyskać pożądane wyjście:
-
static let key = "API_KEY"
: Typ właściwości, która jest stała -
static var cnt = 0
: typ właściwości, która jest zmienną -
let id = 0
: stała (może być przypisany tylko raz, ale może być przypisany w czasie wykonywania) -
var price = 0
: zmienna
Podsumowując wszystko var i pozwól zdefiniować zmienność, a statyczny i brak zdefiniowania zakresu. Możesz użyć static var
, aby śledzić liczbę utworzonych instancji, podczas gdy możesz chcieć użyć tylko var
za cenę różniącą się od obiektu. Mam nadzieję, że to trochę wyjaśni.
Przykładowy Kod:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-09 21:50:50
Zmienna statyczna jest współdzielona przez wszystkie instancje klasy. Wrzuć ten przykład w playground:
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
Gdy zmienisz zmienną dla właściwości statycznej, ta właściwość będzie teraz zmieniana we wszystkich przyszłych instancjach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-16 22:21:36
Zmienne statyczne należą do typu, a nie do instancji klasy. Możesz uzyskać dostęp do zmiennej statycznej, używając pełnej nazwy typu.
Kod:
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
Mam nadzieję, że to ci pomoże..Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-29 05:14:32
"słowo kluczowe let definiuje stałą" jest mylące dla początkujących, którzy pochodzą z C# tła (jak ja). w języku C# można myśleć o zmiennej "let" jako zmiennej "readonly" .
(odpowiedź na jak dokładnie działa słowo kluczowe " let " w języku Swift?)
Użyj zarówno static
jak i let
do zdefiniowania stałej
public static let pi = 3.1416 // swift
public const double pi = 3.1416; // C#
public static final double pi = 3.1416 // Java
Gdy używam let
do zdefiniowania stałej, czuję się jakbym używał readonly
C#. Więc używam zarówno static
jak i let
do zdefiniowania stałej szybko.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-12 01:54:21
Aby zobaczyć różnicę między właściwościami typu i / lub metodami a właściwościami klasy i / lub metodami, spójrz na ten sam, wyjaśniający przykład z dokumentów apple
class SomeClass {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 27
}
class var overrideableComputedTypeProperty: Int {
return 107
}
}
Właściwości statyczne mogą być deklarowane tylko dla typu, a nie globalnie. Innymi słowy właściwość statyczna = = = wpisz właściwość w języku Swift. Aby zadeklarować właściwość type należy użyć słowa kluczowego static.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-03 11:22:17