gpt4 book ai didi

swift - 为什么 MyStack 不符合 ProtoStack 的任何想法?

转载 作者:行者123 更新时间:2023-11-28 06:39:41 26 4
gpt4 key购买 nike

我在 Xcode 8β2 playground 中整理了一个本应是简单样本的片段。不幸的是,我不明白为什么 struct 不符合 protocol。我敢肯定这是非常简单的事情,但我一生都看不到它。

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 }
}

最佳答案

为了符合你的ProtoStack当前编写的协议(protocol),您的pushpop MyStack 中的方法不可能是mutating ,因为您不能用 mutating 满足非变异协议(protocol)要求结构/枚举方法。因此,如果您希望这些方法是 mutating ,那么您还需要在协议(protocol)中将它们标记为如此。

作为Swift language guide says (强调我的):

If you define a protocol instance method requirement that is intended to mutate instances of any type that adopts the protocol, mark the method with the mutating keyword as part of the protocol’s definition. This enables structures and enumerations to adopt the protocol and satisfy that method requirement.

A mutating协议(protocol)要求中的方法可以通过 mutating 来满足1 值类型(例如结构或枚举)中的实例方法或类中的常规实例方法,因为类实例可以自由改变。

1。可变协议(protocol)要求也可以通过值类型中的非可变方法来满足,因为这不会破坏与协议(protocol)的契约(没有任何依赖于在该方法中实际发生的突变) .

关于swift - 为什么 MyStack 不符合 ProtoStack 的任何想法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38282928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com