我在下面定义的协议中遇到问题。我有两个要求:Swift 2 - 符合Equatable问题的协议
- 我希望能够使用的协议
Peer
为其他类类型,同时保持具体类私有。 - 我想将协议存储在一个数组中,并能够确定实例的索引。
为了满足第二点,我需要使协议符合Equatable
协议。但是当我这样做时,我不能再使用Peer
作为一种类型,因为它需要被视为一个通用类型。这意味着我不能再具体实现私有了,需求1被破坏了。
想知道是否有其他人遇到过这个问题,并以某种方式绕过它。也许是我误解了我在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
}
}
错误在indexOf
如果Peer
是不Equatable
:
cannot convert value of type 'Peer' to expected argument type '@noescape (Peer) throws -> Bool'
阵列-的协议可能会出现问题。您是否观看基于协议的Swift编程的WWDC 2015视频? – matt
几个月前我看过它。我会复赛,看看它是否给我任何线索。 – Mark
视频的核心部分就是一系列协议采用者可以平等化的问题。但要注意的是:协议阵列是有问题的。 :) – matt