我在下面定義的協議中遇到問題。我有兩個要求: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