現在、私はControl
とControllable
という名前のクラスとプロトコルを書いています。(タイプ)とタイプの違い
Control
は、Controllable
に準拠している必要があります。
Control
は、スタックとして他の配列を有する。 Controllable
をスタックに追加する前に、スタックにその要素が含まれているかどうかを確認する必要があります。はいの場合は、要素をスタックの先頭に移動します。
大丈夫です。 VERSION_1:
import Foundation
protocol Controllable: Equatable {
}
func ==<T: Controllable>(lhs: T, rhs: T) -> Bool {
return ObjectIdentifier(lhs).uintValue == ObjectIdentifier(rhs).uintValue
}
class Control: Controllable {
static var mainControl = Control()
private init() {
}
private var stack: [Controllable] = []
func addToStack(controllable: Controllable) {
}
}
エラー(Xcodeの7.3)があります:
return ObjectIdentifier(lhs).uintValue == ObjectIdentifier(rhs).uintValue
タイプの初期化子を呼び出すことはできませんが、 'ObjectIdentifier' タイプの引数リストで '(T')
質問1:なぜですか?どのようにすればObjectIdentifier
をlhs
とrhs
から構成できますか?
VERSION_2:
return ObjectIdentifier(element).uintValue == ObjectIdentifier(controllable).uintValue
タイプの引数リストに型 'ObjectIdentifier' 初期化子を呼び出すことはできません「(:(再度)エラーがあり
import Foundation protocol Controllable { } class Control: Controllable { static var mainControl = Control() private init() { } private var stack: [Controllable] = [] func addToStack(controllable: Controllable) { stack.contains({ element in return ObjectIdentifier(element).uintValue == ObjectIdentifier(controllable).uintValue }) } }
(制御可能)) '
質問2:(Controllable)
タプルですか?どのようにタプルからControllable
を抽出する必要がありますか?私の英語
'Controllable'だけをクラスに制限し、' === 'を使用したいと思われるのでしょうか?とにかく、最終的に配列を具体的な型として宣言しなければなりません。プロトコルではありません。 – Sulthan