Swift 3 重构:"Type 'NSView' has no member ..." 错误
Swift 3 Refactoring: "Type 'NSView' has no member ..." Error
在 Swift 3 之前,我在我的 NSRulerView
子类中创建了一个 Selector
的私有扩展,如下所示:
private extension Selector {
static let shouldAddMarker = #selector(NSView.rulerView(_:shouldAdd:shouldAddMarker:))
static let willAddMarker = #selector(NSView.rulerView(_:willAdd:atLocation:willAddMarker:atLocation:))
static let didAddMarker = #selector(NSView.rulerView(_:didAdd:didAddMarker:))
}
这很方便,因为我可以简单地使用我的私有简短成员名称来访问选择器,如下所示:
if self.delegate?.respondsToSelector(.shouldAddMarker) == true {
// I have a delegate and it conforms to the NSRulerMarkerClientViewDelegation protocol.
}
现在我拼命尝试将我现有的 Swift 代码库转换为 3.0,NSView
似乎没有实现上述方法。
我知道 NSRulerMarkerClientViewDelegation
是一个非正式的协议,它声明的方法是作为 NSView 的扩展实现的,但我没有看到任何 API 与 Swift 的变化 2.x 到 3.0 会破坏我现有的选择器。
有人知道我应该从这里去哪里吗?任何建议将不胜感激。
以下是 Swift 3 的新选择器:
private extension Selector {
static let shouldAddMarker = #selector(NSView.rulerView(_:shouldAdd:))
static let willAddMarker = #selector(NSView.rulerView(_:willAdd:atLocation:))
static let didAddMarker = #selector(NSView.rulerView(_:didAdd:))
}
在 Swift 3 之前,我在我的 NSRulerView
子类中创建了一个 Selector
的私有扩展,如下所示:
private extension Selector {
static let shouldAddMarker = #selector(NSView.rulerView(_:shouldAdd:shouldAddMarker:))
static let willAddMarker = #selector(NSView.rulerView(_:willAdd:atLocation:willAddMarker:atLocation:))
static let didAddMarker = #selector(NSView.rulerView(_:didAdd:didAddMarker:))
}
这很方便,因为我可以简单地使用我的私有简短成员名称来访问选择器,如下所示:
if self.delegate?.respondsToSelector(.shouldAddMarker) == true {
// I have a delegate and it conforms to the NSRulerMarkerClientViewDelegation protocol.
}
现在我拼命尝试将我现有的 Swift 代码库转换为 3.0,NSView
似乎没有实现上述方法。
我知道 NSRulerMarkerClientViewDelegation
是一个非正式的协议,它声明的方法是作为 NSView 的扩展实现的,但我没有看到任何 API 与 Swift 的变化 2.x 到 3.0 会破坏我现有的选择器。
有人知道我应该从这里去哪里吗?任何建议将不胜感激。
以下是 Swift 3 的新选择器:
private extension Selector {
static let shouldAddMarker = #selector(NSView.rulerView(_:shouldAdd:))
static let willAddMarker = #selector(NSView.rulerView(_:willAdd:atLocation:))
static let didAddMarker = #selector(NSView.rulerView(_:didAdd:))
}