2015-01-04 2 views
4

Я пытаюсь использовать протоколы, чтобы дать определенные спецификации структурам, которые будут их реализовывать, но мне нужно иметь возможность сделать эти общие.Как создать зависимый общий протокол в swift

Например:

protocol NodeType { 
} 

protocol EdgeType { 
    var fromNode: NodeType 
    var toNode: NodeType 
} 

Проблема заключается в том, что оба узла могут быть разного типа Структуры, реализующие реализующие NODETYPE протокола

В идеальном мире я бы это нужно:

protocol EdgeType<T: NodeType> { 
    var fromNode: T 
    var toNode: T 
} 

, чтобы убедиться, что оба узла являются одним и тем же классом или структурным типом

Возможно ли это в настоящее время в быстром? Заранее спасибо

+0

Related: [? Как создать общие протоколы быстрой прошивки] (http://stackoverflow.com/questions/ 24469913/how-to-create-generic-protocols-in-swift-ios), [Swift Generic Protocol] (http://stackoverflow.com/questions/25082769/swift-generic-protocol). –

ответ

3

Вы должны взглянуть на Associated Types. Они являются разновидностями для протоколов.

protocol NodeType { 

} 

protocol EdgeType { 

    associatedtype Node: NodeType 

    var fromNode: Node { get } 
    var toNode: Node { get } 

} 

Тогда вы можете соответствовать EdgeType, указав конкретную NodeType реализации:

struct MyNode: NodeType { 

} 

struct MyEdge: EdgeType { 

    associatedtype Node = MyNode 

    var fromNode: MyNode { 
     return MyNode() 
    } 

    var toNode: MyNode { 
     return MyNode() 
    } 

} 
Смежные вопросы