Spróbuj użyć nil coalescing operator.
według dokumentacji Apple:
NIL operator koalescencyjny (a ?? b) rozpakowuje opcjonalny A jeśli zawiera wartość, lub zwraca wartość domyślną b jeśli jest zerowa.
Więc funkcja mogłaby wyglądać następująco:
func numberOfObjectsInMyArray() -> Int {
return (myArray?.count ?? 0)
}
zgadzam się z innymi, że może to być zły pomysł z wielu powodów (jak czyni to wygląda tam jest tablicą o liczbie "0", gdy w ogóle nie ma tablicy), ale hej, nawet złe pomysły wymagają implementacji.
EDIT:
Więc dodaję to, bo dwie minuty po tym, jak pisał tę odpowiedź, natknąłem powód robi dokładnie to, co autor chce zrobić.
Implementuję protokół NSOutlineViewDataSource w Swift. Jedną z funkcji wymaganych przez protokół jest:
optional func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: AnyObject?) -> Int
Ta funkcja wymaga, aby powrócić liczby dzieci parametru item
. W moim kodzie, jeśli element ma jakiekolwiek potomstwo, będą one przechowywane w tablicy, ja nie zainicjuję tej tablicy, dopóki faktycznie dodaję dziecko do tablicy.
Innymi słowy, w momencie dostarczania danych do NSOutlineView, children
może być nil
lub może być wypełnione, lub mogło zostać kiedyś wypełnione, ale później wszystkie obiekty zostały usunięte, w takim przypadku nie będzie nil
, ale będzie to count
będzie 0
. NSOutlineView nie obchodzi, czy children
jest nil
- wszystko, co chce wiedzieć, to ile wierszy będzie potrzebować do wyświetlenia item
's children
.
W tej sytuacji ma sens, aby zwrócić 0
, jeśli children
jest nil
. Jedynym powodem wywołania funkcji jest ustalenie, ile rzędów będzie potrzebować NSOutlineView. Nie ma znaczenia, czy odpowiedź brzmi: 0
, ponieważ children
jest zerowa lub dlatego, że jest pusta.
return (children?.count ?? 0)
zrobi to, czego potrzebuję. Jeśli children
jest nil
, zwróci 0
. W przeciwnym razie zwróci count
. Idealny!
Być może zwrócić opcjonalne 'Int?'? –
Opcjonalne 'Int' nie jest konieczne, ponieważ w każdym przypadku istnieje tutaj wartość zwracana przez wartość. – holex
'return myArray? .count' ... tak, zdecydowanie krócej. Ale oczywiście polega to na wykorzystaniu wyniku w miejscu, w którym opcjonalne jest dozwolone. No good w 'func numberOfSectionsInTableView (tableView: UITableView!) -> Int' na przykład –