Flush con entusiasmo dall'estensione di Bool
, ho pensato che sarebbe stato divertente estendere le chiusure in Swift (lo abbiamo fatto senza problemi in Smalltalk, quindi perché no?).Non è possibile estendere la chiusura in Swift?
Ecco il mio parco giochi:
typealias NiladicClosure =() ->()
extension NiladicClosure {
var theAnswerToLife:Int {
return 42
}
}
let block:NiladicClosure = {}
block.theAnswerToLife
Non funziona, dicendo che NiladicClosure does not have a member named 'theAnswerToLife'
. Guardando nella console, ho un po 'più informazioni:
Playground execution failed: /var/folders/2k/6y8rslzn1m95gjpg534j7v8jzr03tz/T/./lldb/33726/playground119.swift:3:1: error: non-nominal type 'NiladicClosure' cannot be extended
extension NiladicClosure {
^ ~~~~~~~~~~~~~~
Che cos'è un non-nominal type
? C'è un modello/soluzione?
Altre domande simili precedenti a Swift 2, erano anche abbastanza specifiche che le persone offrivano soluzioni alternative all'estensione specifica. Mi interessa sapere se le chiusure Swift siano oggetti di prima classe a cui aggiungere comportamenti aggiuntivi, come altre cose in Swift.
Non è possibile estendere le chiusure. Confronta http://stackoverflow.com/questions/28317625/can-i-extend-tuples-in-swift (che riguarda l'estensione delle tuple, ma la stessa risposta vale per le funzioni/chiusure). –
Qualche idea _WHY_ tuple e chiusure non sono estendibili? Nel caso della chiusura, è perché le chiusure non sono mai realmente reificate con un oggetto reale (o una struttura)? (almeno, non riesco a vedere da nessuna parte dove lo fanno) –
@TravisGriggs È "[principalmente una limitazione di implementazione] (https://twitter.com/jckarter/status/611656674391097344)". –