2015-10-29 10 views
5

Swift size miras oluşturabilirsiniz. Eğer B içinde bir fonksiyon yaratıyorsam, A süper sınıfına referans alabileceğim bir yol var mı? Swift'de bir ebeveyn/süper sınıfa nasıl başvuru yapılır? <code>A</code> Bu örnekte <code>B</code> devralır</p> <pre><code>class A { } class B:A { } </code></pre> <p>:

self.parent 

self.super 

Ya

self.super() 

Ya

Ben tüm bu denenmiş ve hiçbiri benim için çalıştı: Ben bir şey gibi olurdu düşünüyordum. Süper sınıfa nasıl referans alacağını bilen var mı?

+1

"Üst sınıfına referans" ile ne demek istiyorsunuz? Gerçekten yapmaya çalıştığın şey nedir? Bazı yöntemlerin devralınan _implementation_'ına erişebilirsiniz - bu genellikle herkesin isteyebileceği bir şeydir. Pratik gerçek hayatta daha ne istiyorsun? – matt

+0

@matt Temel sınıfın ne olduğunu bulmak için herhangi bir sınıfın süper sınıfına dinamik bir başvuru istiyorum. Oradan başlayabileceğimi ya da üzerinde bir çeşit yansıma yapabildiğimi varsayarım. –

+0

Swift'in iç görüsü yok; Bu kasıtlı. Kakao'ya sizin için göz atmasını isteyebilirsiniz, ancak yine de, ne yapmak istediğinize dair gerçek bir örnek vermediniz. Eğer fikir bir B ve bir diğeri ise bir şey yapman gerektiğinde, polimorfizm bununla ilgilenir. Örneğin, başladığımız şeye bağlı olarak A veya B'yi başlatan bir fabrika işlevini kolayca yazabilirsiniz. Yine, ve son kez, sana ne yapmak istediğini soruyorum. – matt

cevap

0
class A { 
    func f() { 
     print("A") 
    } 
} 
class B : A { 
    override func f() { 
     print("B") 
     super.f() 
    } 
} 
let b = B() 
b.f() 
1

Sen Objective-C çalışma zamanını ithal etmek gerekir ve o zaman class_getSuperclass() kullanabilirsiniz.

import ObjectiveC 

class A {} 

class B:A { 
    func mySuper() -> AnyClass { 
     return class_getSuperclass(self.dynamicType) 
    } 
} 

B().mySuper() // A.Type 

Bunun hata ayıklama ve günlüğe kaydetme dışında bir şey için iyi bir fikir olması son derece olası değildir. O zaman bile, o çok un-Swiftlike ve bunu takip etmeden önce derinlemesine yeniden düşünmelisin. Bunun gibi alt sınıflar bile gayet güzel. Protokoller ve uzantılar hemen hemen her zaman saf Swift'deki mirastan daha iyi bir çözümdür (ve mirassız olarak, süper sınıflar hakkında endişelenmeye gerek yoktur).

+0

AnyClass ile neler yapabilirsiniz ??? – user3441734

+1

AnyClass ile ne yapmak istersiniz? Onu kontrol edebilir, mesaj gönderebilir, diğer sınıflarla karşılaştırabilir, genel işlevler konusunda uzmanlaşmak için kullanabilirsiniz. Bu bir Swift türüdür. –

+0

Lütfen bana pratik bir örnek göster. – user3441734

0
class A { 
    var type: AnyClass { return A.self } 
} 

class B : A { 
    override var type: AnyClass { return B.self } 
    var superType: AnyClass { return super.type} 
} 

let type = B().type 
let superType = B().superType 
0

Verilen sınıf A: B, sadece ObjectiveC aktardıktan sonra B içinde self.superclass çağırmak başardı.

İlgili konular