Swift协议:方法没有覆盖其超类中的任何方法

55

由于Xcode 6在使用Swift时仍存在许多错误,我不确定这是其中之一还是我漏掉了什么。我的类采用协议NSLayoutManagerDelegate。但是似乎无法覆盖我需要的方法。我按照文档说明操作:

override func layoutManager(_ aLayoutManager: NSLayoutManager!,
        didCompleteLayoutForTextContainer aTextContainer: NSTextContainer!,
        atEnd flag: Bool) {

    }

但是我在这里遇到了错误:方法没有覆盖其超类中的任何方法。我该怎么办?

1个回答

121
你正在实现一个协议中的方法,但这不是一个覆盖。只需删除override关键字即可。覆盖是当你的超类也实现了该方法,并且你提供了一个替换或修改超类实现行为的版本。这里并非如此。

21
这并不是一个愚蠢的问题,因为 Xcode 6 的自动补全为我们添加了“override”,导致了混淆。 - 拇指 muzhi.com
8
这确实令人遗憾,因为这意味着没有编译时检查来确保您已经正确地得到了签名... - MattM
是的,我认为这是一件坏事,因为没有编译时检查签名是否正确。但是,在Swift中,所有协议方法都是必需的,如果您没有实现所有必需的方法,您将会得到某种编译错误。 - DouglasHeriot
@DouglasHeriot 是的,但是如果你实现了协议中定义的方法但没有实现协议本身,你不会收到警告。 - Jeremy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接