2017-09-14 6 views
0

Ist es möglich, ein Protokoll zu haben, das sich auf ein generisches Protokoll spezialisiert? Ich möchte etwas wie folgt aus:Swift-Protokoll spezialisiertes generisches Protokoll

protocol Protocol: RawRepresentable { 
    typealias RawValue = Int 
    ... 
} 

Dies kompilieren, aber wenn ich versuche, die init oder rawValue aus einem Protokoll Instanz zugreifen, seine Art ist RawValue statt Int.

+0

Sie versuchen, ein Protokoll zu erstellen, die nur für Aufzählungen mit einem 'Int ist 'Rohwert? –

+1

Finden Sie keinen besseren Namen für Ihr Protokoll? –

Antwort

2

In Swift 4 können Sie Einschränkungen zu Ihrem Protokoll hinzufügen:

protocol MyProtocol: RawRepresentable where RawValue == Int { 
} 

Und jetzt alle auf MyProtocol definierten Methoden wird eine Int rawValue haben. Zum Beispiel:

extension MyProtocol { 
    var asInt: Int { 
     return rawValue 
    } 
} 

enum Number: Int, MyProtocol { 
    case zero 
    case one 
    case two 
} 

print(Number.one.asInt) 
// prints 1 

Typen, die RawRepresentable annehmen, aber dessen RawValue nicht Int Ihr eingeschränktes Protokoll nicht annehmen:

enum Names: String { 
    case arthur 
    case barbara 
    case craig 
} 

// Compiler error 
extension Names : MyProtocol { } 
Verwandte Themen