Swift 协议方法与超类冲突 属性

Swift protocol method conflicts with superclass property

我正在尝试子class NSColorPicker 并采用 NSColorPickingCustom 协议。

NSColorPicker 有一些简单的计算属性,例如

var buttonToolTip: String { get }

但是NSColorPickingCustom需要同名的方法,比如

func buttonToolTip() -> String

如果我实现方法buttonToolTop,它与同名的superclassgetter冲突。如果我覆盖计算的 属性,我就不符合协议。如果我尝试同时使用 both 那么它们当然会相互冲突。

有什么方法可以让 class 在 subclassing NSColorPicker 时采用该协议?

NSColorPicker 已经为您提供了 NSColorPickingDefault 一致性(这似乎是 buttonToolTip() 要求的来源)。仅覆盖计算的 属性 似乎工作正常:

import Cocoa

class C: NSColorPicker, NSColorPickingCustom
{
    override var buttonToolTip: String { return "test" }

    // NSColorPickingCustom
    func supportsMode(mode: NSColorPanelMode) -> Bool { return false }
    func currentMode() -> NSColorPanelMode { return .NSNoModeColorPanel }
    func provideNewView(initialRequest: Bool) -> NSView { return NSView() }
    func setColor(newColor: NSColor) { }
}

let c = C()
c.buttonToolTip // returns "test"

let d: NSColorPickingDefault = C()
d.buttonToolTip() // returns "test"