2016-01-03 26 views
28

statik anahtar kelimesini hızlı bir şekilde kullanırken kafam karıştı. Hızlı bildiğimiz gibi tanıtımı, değişmez nesneleri bildirmek için anahtar sözcüğünü kullanalım. Yaşam süresi boyunca büyük olasılıkla değişmeyecek bir tablo görüntüleme hücresinin kimliğini bildirmek gibi."let" anahtar kelimesi sabit/değişmezleri hızla tanımlamak için kullanılırsa "statik" anahtar kelimenin kullanımı nedir?

struct classConstants 
{ 
    static let test = "test" 
    static var totalCount = 0 
} 

oysa kelime same.In Objective C bazı sabit gibi

static NSString *[email protected]"cellId"; 
ilan etmeye statik kullanılan do let: Artık yapı gibi bazı bildiriminde statik anahtar kelime kullanımı nedir

Beni daha da meraklı kılan, statik anahtar kelimesinin ile birlikte ve var anahtarının kullanılmasıdır. Ord. Bu statik anahtar kelimeyi nerede kullanacağımı kimse anlatabilir mi? Daha önemlisi, hızlı bir şekilde statik'a gerçekten ihtiyacımız var mı?

+7

Hangi statik olduğunu bilmiyorsanız, hızlı yazmaya başlamadan önce bazı OOP kitaplarını okumanızı öneririz. Statik değişken, bir nesnenin tüm örnekleri arasında paylaşılır, eğer const ise (eğer) sadece immutable –

+4

@DanielKrom: Anlayışım gereği, C, Objective C'de bazı sabitleri bildirmek için statik kullanıyorum. bunun ötesinde bilgi. Yani, sanırım ** ve ** statik ** aynı olsun. – Poles

+4

C ve Objective-C statikleri sabit değildir (sabit olarak tanımlanmadıkça), muhtemelen bunu iyi anlamıyorsunuzdur ve iyi değil, hiç kimse bilgi ile doğmuyor, statikler global değişkenlerin bir türüdür –

cevap

59

senin için onları kıracak:

  • var: oluşturmak için kullanılan bir değişken
  • let: oluşturmak için kullanılan sabit
  • static: ile type properties oluşturmak için kullanılan ya let veya var

Şimdi istediğiniz çıkışı elde etmek için birleştirebilirsiniz:

  • static let key = "API_KEY": sabittir tip mülkiyet
  • static var cnt = 0: Sabit
  • var price = 0: Değişken

Yani her şey yukarı var sum ve izin değişken

  • let id = 0 olan tip mülkiyet Statik ve tanım kapsamı yokken mutabiliteyi tanımlar. Nesneden nesneye farklı bir fiyat için sadece var'u kullanmak isteyebilirsinizken, kaç örnek oluşturduğunuzu takip etmek için static var kullanabilirsiniz. Umarım bu bazı şeyleri temizler.

    Örnek Kod:

    class MyClass{ 
        static let typeProperty = "API_KEY" 
        static var anotherTypeProperty = 0 
        var price = 9.99 
        let id = 5 
    } 
    
  • +0

    "' ': bir sabit oluşturmak için kullanılır" = "değişkeni" let "anahtar sözcüğüyle belirtilebilir, daha sonra CONSTANT tanımına aykırı olan (yalnızca bir defada) atanabilir. Eğer C# gibi diğer dillerle karşılaştırırsak '' '' 'readonly' (' '' '' '' '' '' '' '' '' '' ile aynıdır. –

    0

    tip özellikleri ve/veya yöntemleri ve sınıf özellikleri ve/veya yöntemlerin arasındaki farkı görmek, elma dokümanlardan bu öz açıklayıcı örneği inceleyelim lütfen

    class SomeClass { 
        static var storedTypeProperty = "Some value." 
        static var computedTypeProperty: Int { 
         return 27 
        } 
        class var overrideableComputedTypeProperty: Int { 
         return 107 
        } 
    } 
    

    Statik özellikler yalnızca, global olarak değil, tür olarak bildirilebilir. Başka bir deyişle Swift'de statik özellik === type özelliği. Tip özelliğini bildirmek için statik anahtar kelimeyi kullanmanız gerekir.

    +0

    Statikin kendisini statik kullanarak açıklıyorsunuz. OP kesinlikle anlamını bilmiyor ... – Honey

    +2

    @ asma22 ?? Anahtar kelime statik, hızlı ve c dilinde tamamen farklı bir anlama sahiptir. Hızlı bir şekilde statik 'tip' anlamına gelir (özellik veya işlev). 'Statik' ve 'sınıf' özelliği veya işlevi arasındaki fark, 'sınıf' özelliğinin ya da işlevinin geçersiz kılınabileceğidir, 'statik' olamazdı. Arka plandaki kişilerin çoğu, diğer bağlamda 'statik' kullandıklarından, elma 'statik' anahtar kelimesi 'statik' olsa bile açıklama için 'tür' sözcüğünü kullanmaya zorluyorlar. – user3441734

    +1

    Lütfen cevabınızı yorumunuzla birlikte düzenleyebilmemiz için .... – Honey

    12

    Bir sınıfın tüm örneklerinde statik bir değişken paylaşılır.oyun alanında bu örneği atın:

    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 
    

    statik özelliği için değişken değiştirdiğinizde, bu özellik artık tüm gelecek durumlarda değiştirilir.

    +1

    Cevabınız en üstte olmalı –

    6

    Statik Değişkenler, sınıf örneğinden ziyade bir türe aittir. Statik değişkeni türün tam adını kullanarak erişebilirsiniz.

    Kodu: Bu ..

    1

    size yardımcı

    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 
    

    Umut (benim gibi) C# arka plandan geliyor başlayanlar için kafa karıştırıcı "let anahtar kelime tanımlayan sürekli". C# terimlerinde "readonly" değişkeni olarak düşünebilirsiniz. Ben C# readonly kullanıyorum gibi

    (How exactly does the “let” keyword work in Swift? cevabı)

    Kullanım ben sabit tanımlamak için let her kullandığınızda hem static ve let sabit

    public static let pi = 3.1416   // swift 
    
    public const double pi = 3.1416;   // C# 
    public static final double pi = 3.1416 // Java  
    

    tanımlamak için, hissediyor. Bu nedenle, hızlı olarak sabit tanımlamak için hem static hem de let kullanın.

    İlgili konular