Saya mencoba membuat Dictionary (sebenarnya HashSet ) yang dikunci pada protokol khusus di Swift, tetapi memberi saya kesalahan pada judul:
Protokol 'myProtocol' hanya dapat digunakan sebagai batasan umum karena memiliki persyaratan Jenis Sendiri atau terkait
dan saya tidak bisa membuat kepala atau ekor dari itu.
protocol Observing: Hashable { }
var observers = HashSet<Observing>()
swift
generics
xcode6
swift-protocols
devios1
sumber
sumber
Jawaban:
Protokol
Observing
mewarisi dari protokolHashable
, yang pada gilirannya mewarisi dari protokolEquatable
. ProtokolEquatable
memiliki persyaratan berikut:Dan protokol yang berisi
Self
suatu tempat di dalamnya tidak dapat digunakan di mana pun kecuali dalam batasan tipe.Ini pertanyaan serupa.
sumber
Equatable
tidak selalu berartiEquatable
karena itu tidak sepenuhnya diperlukan untuk menghasilkan kode hash.Dictionary
harus dapat mengetahui apakah objek yang diberikan memang kunci yang benar, karena mungkin saja dua objek berbeda menghasilkan kode hash yang sama. Hmm, itu agak rumit. Jadi masalahnya di sini sebenarnya denganEquatable
.Untuk mengatasi ini, Anda bisa menggunakan obat generik. Pertimbangkan contoh ini:
sumber