I имеет следующую структуру:протокола, который реализует hashable и перегружать операторы
protocol MidiPlayable : Hashable {
var midiValue: UInt8 { get }
}
struct PercussionSound : MidiPlayable {
let name: String
let type: PercussionType
}
struct Note : Hashable, MidiPlayable {
let pitch: Pitch
let octave: UInt8
let midiValue: UInt8
}
Я хочу пройти вокруг этих типов на устройство воспроизведения, как Midiplayable, как я только нужно знать о необработанном значении. Additionaly они будут размещены в наборе так Hashable необходимо, а также я хочу, чтобы сравнить их, так что я хочу, чтобы перегрузить оператор ==! = < и>
Я попробовал два подхода (как в виде свободных функций)
func ==(lhs: Self, rhs: Self) -> Bool {
return lhs.midiValue == rhs.midiValue
}
приводит к ошибке «Использование необъявленного типа„Я“» и
func ==(lhs: MidiPlayable, rhs: MidiPlayable) -> Bool {
return lhs.midiValue == rhs.midiValue
}
приводит к ошибке «Протокол„MidiPlayable“может быть использовано только в качестве общего ограничения, поскольку он имеет Самость или связанные с ними требования типа»
Как я могу решить эту проблему?
К сожалению я исправил сейчас –
В этом случае ответа на свой собственный вопрос и пометить его как правильный. – Qbyte
Нет, я имею в виду, что у меня есть вопрос, который у меня все еще есть. –