【发布时间】:2015-08-05 03:16:28
【问题描述】:
我在尝试继承 NSBezierPath 时偶然发现了一个非常奇怪的问题。
下面是我的子类的定义:
class OSBezierPath: NSBezierPath {
func addLineToPoint(point:CGPoint) {
self.lineToPoint(point)
}
}
除了我无法访问NSBezierPath 的某些初始化程序这一事实之外,该子类还有效。例如下面一行是无效的:
let path = OSBezierPath(ovalInRect: rect)
编译器报错
调用中的额外参数“ovalInRect”
此错误的原因
这个错误的原因在another question 中得到了很好的解释。但是,建议的答案对我来说效果不佳,因为我想要实现的是在 iOS 和 Mac OS 上使用 OSBezierPath。
我的原始代码是这样的:
#if os(iOS)
typealias OSBezierPath = UIBezierPath
#else
class OSBezierPath: NSBezierPath {
func addLineToPoint(point:CGPoint) {
self.lineToPoint(point)
}
}
#endif
此代码不起作用,但我发现了 2 个解决方法,它们比另一个问题中建议的答案更适合我的目的。
【问题讨论】:
-
与stackoverflow.com/questions/29867782/… 相同的问题,尽管 UI 和 NS 之间存在差异。真正的解决方案是一样的:更新到 Xcode 7 测试版,其中 API 被修复。
-
首先,非常感谢您提出这个问题!其次,我正在使用 Xcode 7 beta - 仍然没有运气。
-
我实际上并没有检查 NSBezierPath 的情况,所以我可能是错的。但在 Xcode 7 中,UIBezierPath 是可子类化的 - 类函数已转换为适当的初始化程序并被继承。
-
是的,它们用于 UIBezierPath。但不适用于 NSBezierPath。但是,正如我现在知道的那样,我所经历的并不是真正的错误,我有两种方法可以实现我想要的。您建议的方法肯定会起作用,但如果您检查“P.S.”部分你会看到它们对我的情况来说不是很优雅。我现在将使用其他两种可行的方法发布答案
-
@matt 请重新打开问题,以便我可以添加 2 个更适合 iOS/Mac 便携性的解决方法:)
标签: ios macos swift inheritance swift2