gpt4 book ai didi

swift - 如何在 Swift 中为私有(private)枚举编写一个 equal 方法

转载 作者:搜寻专家 更新时间:2023-10-30 21:56:44 25 4
gpt4 key购买 nike

我是 Swift 的新手,正在尝试编写一个符合 Equatable 的私有(private)枚举。这是我的代码的简化表示:

class Baz {

/* Other members in class Baz */

private enum Test: Equatable {
case Foo
case Bar
}

private func == (lhs: Test, rhs: Test) -> Bool {
//comparison
}
}

在“==”方法这一行,编译器提示“运算符只允许在全局范围内使用”。当我将 enum Test 和“==”方法更改为 public,然后将“==”移出类时,错误就消失了。

我的问题是为私有(private)枚举实现“==”方法的正确方法是什么?

感谢任何帮助。

========

编辑:

谢谢大家帮助我。我没有指定我的私有(private)枚举和上面的函数在一个类中..(代码已更新)

最佳答案

虽然可能不会立即对您有用,但值得注意的是,从 beta 5 开始,在 Swift 3 中,您可以将其设为类型中的 static func。查看Xcode 8 Beta Release Notes ,它说

Operators can be defined within types or extensions thereof. For example:

 struct Foo: Equatable {
let value: Int
static func ==(lhs: Foo, rhs: Foo) -> Bool {
return lhs.value == rhs.value
}
}

Such operators must be declared as static (or, within a class, class final), and have the same signature as their global counterparts.

这也适用于 enum 类型。因此:

private enum Test: Equatable {
case foo
case bar

static func ==(lhs: Test, rhs: Test) -> Bool {
// your test here
}
}

甚至当此 Test 是在另一种类型中实现时,这也有效。

关于swift - 如何在 Swift 中为私有(private)枚举编写一个 equal 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38906990/

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