2017-09-14 241 views
0

是否有可能有专门的通用协议的协议?我想是这样的:Swift协议专用通用协议

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

这并不编译,但是当我尝试从一个协议实例访问initrawValue,其型号为RawValue,而不是Int

+0

你想创建一个协议,这是只适用于枚举与'诠释'原始价值? –

+1

你不能为你的协议找到一个更好的名字吗? –

回答

2

在斯威夫特4,你可以添加约束到您的协议:

protocol MyProtocol: RawRepresentable where RawValue == Int { 
} 

而现在MyProtocol定义的所有方法都会有一个Int rawValue。例如:是采用RawRepresentable

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

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

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

类型,但其RawValue不诚信不能采纳你的约束协议:

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

// Compiler error 
extension Names : MyProtocol { }