Provare a usare la nil coalescing operator.
Secondo la documentazione di Apple:
L'operatore coalescenza nullo (un ?? b) scarta un un optional se contiene un valore, oppure restituisce un valore predefinito b se a è pari a zero.
Quindi la funzione potrebbe essere la seguente:
func numberOfObjectsInMyArray() -> Int {
return (myArray?.count ?? 0)
}
Sono d'accordo con gli altri che questa potrebbe essere una cattiva idea per una serie di ragioni (come fare apparire come v'è una serie con un conteggio di "0" quando in realtà non esiste un array) ma, ehi, anche le idee sbagliate richiedono un'implementazione.
EDIT:
quindi sto aggiungendo questo perché due minuti dopo che ho postato questa risposta, mi sono imbattuto in un motivo per fare esattamente quello che l'autore vuole fare.
Sto implementando il protocollo NSOutlineViewDataSource in Swift. Una delle funzioni richieste dal protocollo è:
optional func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: AnyObject?) -> Int
Tale funzione richiede che ritorni il numero di figli del parametro item
. Nel mio codice, se l'elemento ha figli, saranno archiviati in un array, var children: [Person]?
Non inizializzo quell'array finché non aggiungo effettivamente un figlio all'array.
In altre parole, al momento sto fornendo dati al NSOutlineView, children
potrebbe essere nil
o potrebbe essere popolato, o avrebbe potuto essere tempo popolato, ma successivamente aveva tutti gli oggetti rimossi da esso, nel qual caso non sarà nil
ma è count
sarà 0
. NSOutlineView non si preoccupa se children
è nil
- tutto ciò che vuole sapere è quante righe avrà bisogno di visualizzare lo item
di .
Quindi, è perfettamente logico in questa situazione restituire se children
è nil
. L'unica ragione per chiamare la funzione è determinare quante righe NSOutlineView avrà bisogno. Non importa se la risposta è 0
perché children
è nullo o perché è vuoto.
return (children?.count ?? 0)
farà quello che mi serve. Se children
è nil
, restituirà 0
. Altrimenti restituirà count
. Perfezionare!
Forse restituire un 'Int? 'Opzionale? –
l'opzione 'Int' non è necessaria, perché qui c'è un valore di ritorno del valore. – holex
'return myArray? .count' ... sì, decisamente più corto. Ma ovviamente ciò si basa sul risultato utilizzato in un luogo in cui è consentito un optional. Non valido in 'func numberOfSectionsInTableView (tableView: UITableView!) -> Int' ad esempio –