我有一个问题,涉及到我下面定义的协议。我有两个要求:
想知道是否有人遇到过这个问题并以某种方式解决了它。也许我误解了我在
- 我想在其他类中使用协议
Peer
作为类型,同时保持具体类的私有性。 - 我想将协议存储在数组中,并能够确定实例的索引。
Equatable
协议。但是当我这样做时,我不能再将 Peer
用作类型,因为它需要被视为通用类型。这意味着我不能再将具体实现保持私有,而第一条要求也被破坏了。想知道是否有人遇到过这个问题并以某种方式解决了它。也许我误解了我在
indexOf
处得到的错误...
Group.swift
import Foundation
class Group {
var peers = [Peer]()
init() {
peers.append(PeerFactory.buildPeer("Buddy"))
}
func findPeer(peer: Peer) -> Bool {
if let index = peers.indexOf(peer) {
return true
}
return false
}
}
Peer.swift
import Foundation
protocol Peer {
var name: String { get }
}
class PeerFactory {
static func buildPeer(name: String) -> Peer {
return SimplePeer(name: name)
}
}
private class SimplePeer: Peer {
let name: String
init(name: String) {
self.name = name
}
}
如果Peer
不是Equatable
,则在indexOf
处出现错误:
cannot convert value of type 'Peer' to expected argument type '@noescape (Peer) throws -> Bool'