私は、Xcode8β2プレイグラウンドでサンプルの簡単な部分をまとめておく必要があります。残念ながらstruct
がに準拠していない理由がわかりません。私はそれが非常にシンプルなものだと確信していますが、私の人生のために、それを見ることはできません。MyStackがProtoStackに準拠しない理由は何ですか?
protocol ProtoStack {
associatedtype ItemType
func push(item: ItemType)
func pop() -> ItemType
func isEmpty() -> Bool
func size() -> Int
}
struct MyStack: ProtoStack {
var contents = [Int]()
typealias ItemType = Int
mutating func push(item: Int) { contents.append(item) }
mutating func pop() -> Int { return contents.popLast()! }
func isEmpty() -> Bool { return contents.count == 0 }
func size() -> Int { return contents.count }
}
'pushと' 'pop'プロトコルの要件を' mutating 'としてマークするのを忘れました。 – Hamish
ああ、そうです。面白い。つまり、MyStackは上記のように、クラスによってのみ実装できます。プロトコルにmutatingキーワードを追加すると、構造体によってのみ実装できます。 [編集:プロトタイプがクラスターと構造体の両方で実装できます(プロトコルでmutatingキーワードが使用されている場合) (あなたのコメントを回答してください) –
'mutating'キーワード構造体でしか実装できないことを意味するものではなく、クラスインスタンスが自由に変更できるため、クラス内の通常のメソッドで満たすことができます。しかし、それは現在書かれているように( 'mutating'なしで、' push'と 'pop'でインスタンス状態を変更する必要があります)、クラスによってのみ満たされます。 – Hamish