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?

Author: Poles, 2016-01-03

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 z let lub var. 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
 77
Author: Alex Pelletier,
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.

 42
Author: Bobby,
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..
 7
Author: Vinoth Vino,
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.

 1
Author: Hassan Tareq,
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.

 0
Author: user3441734,
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