此代码会生成 Xcode 错误消息,引导您转圈。假设我有一个称为协议的协议Marker
,我希望标记能够复制自己。这是第一个猜测...
protocol Marker {
func copy() -> Self
}
class Marker1 : Marker {
func copy() -> Self {
return Marker1() // error here
}
}
(我不确定如何正确使用,因为我在The Swift Programming LanguageSelf
文档中找不到它。如果您知道它在哪里记录,请在答案中包含它。)
该代码在标记的行上给出了错误:Cannot convert return expression of type 'Marker1' to return type 'Self'
并建议修复:Insert ' as! Self'
。
我接受修复:
...
return Marker1() as! Self
...
这会导致另一个编译器错误:'Self' is only available in a protocol or as the result of a method in a class; did you mean 'Marker1'?
如果我接受那个“修复”,它会回到原来的错误。我将其称为 Xcode 中的错误。让我们试试别的东西:
func copy() -> Marker1 {
return Marker1()
}
另一个错误:Method 'copy()' in non-final class 'Marker1' must return `Self` to conform to protocol 'Marker'
制作课程final
确实修复了错误。但是有没有办法做到这一点而不使班级决赛?记录在哪里Self
?