2017-03-06 74 views
1

有沒有一種方法可以獲得擴展我的協議的Class類型或Struct類型?Swift - 如何獲得從協議擴展的類?

這裏是我的示例代碼:

protocol a {} 

extension a { 
    static func list(completion: ([StructType] -> Void)) { 
     var items = [StructType]() 
     ... 
     completion(items) 
    } 
} 

struct b{} 
extension b: a {} 

struct c{} 
extension c: a{} 

在這種情況下,我想動態獲取結構一個b的類型,這樣我可以生成它的一個列表,並返回。

非常感謝您回覆我的問題。

回答

1

使用Self關鍵字

protocol P { 
    init() 
} 

extension P { 
    static func list(completion: ([Self]) -> Void) { 
     let items = [Self(), Self(), Self()] 
     print(Self.self) 
     completion(items) 
    } 
} 

struct B {} 
extension B: P {} 

class C { 
    required init() {} 
} 
extension C: P {} 

B.list{ print($0) } 
C.list{ print($0) } 
+0

謝謝你這麼多的快速回復。 – Norak

+0

你先生救我。 – Norak

+0

'type(of:self)'可能會更好。它獲得了對象的動態類型,所以如果你有從'C'繼承的類'D',它會給你答案'D'('Self'仍然是'C')。 – JeremyP