Quindi sto cercando di estendere i tipi di interi di Swift con alcune funzioni utili che uso molto, tuttavia non sono chiaro su quali protocolli dovrei estendere.Estensione di tipi di numeri interi generici in Swift
Ad esempio, supponiamo di voler implementare una funzione per il blocco di un valore (se è inferiore al minimo impostarlo, altrimenti se è maggiore di un valore massimo, impostarlo su quello). Il mio primo pensiero è stato quello di fare qualcosa di simile:
extension Int {
func clamp(minimum:Int, maximum:Int) {
if self < minimum { return minimum }
if self > maximum { return maximum }
return self
}
}
po 'di un esempio semplicistico, ma illustra il problema; se ora voglio chiamare questo per un UInt
quindi naturalmente non posso, quindi devo aggiungere un equivalente a UInt
, ma che non funzionerà per un UInt16
e così via.
Ho pensato che potrei forse estendere qualcosa più in alto sulla catena e utilizzare invece i generici, tuttavia non è possibile estendere protocolli come IntegerType
.
Quindi, c'è un posto più appropriato che potrei inserire la mia estensione (s)?
Anziché estendere un tipo con cui tutti hanno già familiarità, dovresti racchiudere l'Integer con la tua classe o inserire i tuoi metodi usati frequentemente in una classe util matematica statica – bhspencer
Non è un'estensione inteso in modo ecologico come alternativa a questo? Ho pensato che potevo semplicemente inserire le mie funzioni in un'estensione di dire 'IntegerType' usando i generici e in questo modo apparirebbe per tutti i valori interi. Mi sembra molto più ordinato di una classe IntUtils con un sacco di funzioni statiche. – Haravikk
L'argomento per non farlo è che esiste un'interfaccia ben nota per i tipi di basso livello che tutti i programmatori di una particolare lingua conosceranno. Se so cosa si può fare con un intero in un progetto, dovrei sapere cosa si può fare con un intero in un altro progetto. – bhspencer