Cómo llamar al método estático proporcionado por el protocolo en Swift

Cómo acceder al método de protocolo static dentro de una instancia

Tengo una list de Contact , el contacto puede ser un FamilyContact que henetworkinga de Contact y el GroupStatus protocol

Quiero llamar al método estático desde GroupStatus pero en vano …

Aquí está mi código

 protocol GroupStatus { static func isPrivate() -> Bool // static method that indicates the status } protocol IsBusy { func wizzIt() } class AdresseBook { private var contacts = [Contact]() func addOne(c: Contact) { contacts.append(c) } func listNonPrivated() -> [Contact]? { var nonPrivateContact = [Contact]() for contact in contacts { // here is I should call the static method provided by the protocol if self is GroupStatus { let isPrivate = contact.dynamicType.isPrivate() if !isPrivate { nonPrivateContact.append(contact) } } nonPrivateContact.append(contact) } return nonPrivateContact } } class Contact : Printable { var name: String init(name: String) { self.name = name } func wizz() -> Bool { if let obj = self as? IsBusy { obj.wizzIt() return true } return false } var description: String { return self.name } } class FamilyContact: Contact, GroupStatus { static func isPrivate() -> Bool { return true } } 

No puedo comstackr Contact.Type does not have a member named 'isPrivate'

Como puedo llamarlo Funciona si elimino la palabra key static , pero creo que es más lógico definirla como estática.

Si reemploop

 let isPrivate = contact.dynamicType.isPrivate() 

por

 let isPrivate = FamilyContact.isPrivate() 

Funciona, pero puedo tener más de 1 subclasss

Si elimino el keywork static , puedo hacerlo de esta manera:

 if let c = contact as? GroupStatus { if !c.isPrivate() { nonPrivateContact.append(contact) } } 

Pero quiero mantener la palabra key static

Esto parece un error o una característica no compatible. Espero que las siguientes obras:

 if let gsType = contact.dynamicType as? GroupStatus.Type { if gsType.isPrivate() { // ... } } 

Sin embargo, no comstack:

 error: el acceso a los miembros del valor del tipo de protocolo 'GroupStatus.Type' no se implementa

GroupStatus.Type con FamilyContact.Type lugar de GroupStatus.Type . Un problema similar se informa aquí:

  • Swift 1.1 y 1.2: miembros de acceso de tipo de protocolo de valor XXX.Type 'no se implementa

Hacer isPrivate() un método de instancia en lugar de un método de class es la única solución en la que actualmente puedo pensar, tal vez alguien venga con una solución mejor …

Actualización para Swift 2 / Xcode 7: Como @Tankista señaló a continuación, esto se ha solucionado. El código anterior comstack y funciona como se esperaba en Xcode 7 beta 3.