2016-04-11 22 views
2

Statik değişkenler hakkındaki görüşümü ve hızla kullandıktan sonra sabitimi yok etti.Swift: Statik olmayan yöntemler, dinamik değişkenler olmadan durağan değişkenleri ve sabit (statik let) neden arayamıyor?

Hızlı neden diğer değişkenlerde durağan değişkenleri ve sabitleri aramamıza izin vermiyor? örneğin

:

class Aa { 
    static let name = "Aario" 
    func echo() { 
     print(name)  // Error! 
    } 
} 

Sn Dev dynamicType kullanmak söyledi.

class Aa { 
    static var name = "Aario" 
    func echo() { 
     print(self.dynamicType.name) 
    } 
} 

let a = Aa() 
a.dynamicType.name = "Aario Ai" 
a.echo()       // it works!!! 

Çalışıyor! Peki neden statik değişkenleri çağırmak için dynamicType kullanmalıyım?

Son olarak, cevap:

class Aa { 
    static var name = "Static Variable" 
    var name = "Member Variable" 
    func echo() { 
     print(self.dynamicType.name) // Static Variable 
     print(Aa.name)     // Static Variable 
     print(name)      // Member Variable 
    } 
} 

let a = Aa() 
a.dynamicType.name = "Aario Ai" 
Aa.name = "Static: Aario" 
a.name = "Member: Aario" 
a.echo()       // it works!!! 

diğer dillerle gerçekten farklı.

+1

self.dynamictype.name kullanın – ogres

+0

Haklısınız. Bana başka dillerden neden farklı olduğunu söyleyebilir misin? – AarioAi

+0

Hem örnek özelliği hem de aynı ada sahip bir tür (sınıf/statik) özellik olabilir. –

cevap

3

Bu tür kod yazarken bile, statik değişkenler türleriyle adreslenmelidir. Sadece örnek özellikleri gibi,

Tipi özellikleri sorgulanan ve nokta sözdizimi ile ayarlayın: The Swift Programming Language (Swift 2.2) - Properties ("Sorgulama ve Ayar Tipi Özellikleri") bakın. Ancak, tür özellikleri sorgulanır ve bu türün bir örneğinde değil, türüne ayarlanır.

Kodunuzda, name yerine Aa.name yazıp sorun olmayacaktır.

İlgili konular