swift - 在 Swift 中重载运算符

标签 swift operator-overloading

我试图在 Swift 中实现 Comparable 协议(protocol),但编译器不喜欢我重载 < 运算符的任何尝试。我检查了 Apple 文档和所有 SO 帖子,但没有一个可以编译。 Xcode 给我这个警告:

Consecutive declarations on a line must be separated by ';'

它一直建议我在小于号后插入一个分号。对我做错了什么的任何见解表示赞赏。

class SomeClass: NSObject, Equatable, Comparable{

    var number: UInt32!

    override init()
    {
        super.init()
        self.number = arc4random()
    }

    func == (lhs: SomeClass, rhs: SomeClass) -> Bool
    {
        return true
    }

    func < (lhs: SomeClass, rhs: SomeClass) -> Bool
    {
        return true
    }

}

最佳答案

您会看到此错误,因为必须在类定义之外重载运算符,例如移动

func == (lhs: SomeClass, rhs: SomeClass) -> Bool
{
    return true
}

func < (lhs: SomeClass, rhs: SomeClass) -> Bool
{
    return true
}

在您的类定义之外,它将起作用(除了它们不会通过此实现返回正确的结果)。

关于swift - 在 Swift 中重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28113207/

相关文章:

c++ - std::vector 和 std::list 的重载运算符

c++ - 构造类的返回值

支持 __LINE__ 宏和其他宏的 C++ 风格记录器

nsstring - UILabel 所需的高度取决于字符串长度(Swift、iOS 8)

ios - 在AVPlayer上使用periodicObserver跟踪播放进度

ios - UITableViewController 单元格中的索引超出范围 - swift

c++ - 何时重载逗号运算符?

ios - 为什么我的 UITableViewCells 在我点击它们时会变成灰色?

ios - Swift 3 For 循环比较和更改

c++ - 调用 operator() 时是否可以提供模板参数?