2015-06-05 2 views
3

У меня есть очень обобщенная функция, которая должна возвращать AnyObject:Swift: как установить AnyObject до нуля или эквивалентного

func backgroundFunction(dm : DataManager) -> AnyObject { 
    ... 
} 

однако есть некоторые случаи, когда я хотел бы вернуть пустого/нулевое значение

Я думал об этих двух значениях:

  • nil

но это, кажется, не допускается: Тип 'AnyObject' не соответствует протоколу 'NilLiteralConvertible'

  • 0

, но когда я проверить, если это значение AnyObject является 0 с value != 0 Я получаю эту ошибку: Бинарный оператор '! =' Не может быть применен к операндам типа «AnyObject» и «nil»

Есть ли какое-нибудь решение?

+3

Задать ему необязательный объект AnyObject: AnyObject ?. Только опции могут быть установлены и отмечены нулем. – Arbitur

+0

@Arbitur, я просто попробовал использовать дополнительный AnyObject, и он действительно работает! спасибо, я думал, что у вас не может быть опций, возвращающих значения в функции –

ответ

12

только необязательное значение может быть установлено в ноль или проверить на ноль. Поэтому вы должны сделать свой тип возврата необязательным.

func backgroundFunction(dm : DataManager) -> AnyObject? { 
    ... 
    return nil 
} 
1

Я нашел решение, возвращая дополнительный AnyObject:

func backgroundFunction(dm : DataManager) -> AnyObject? { 

    if IHaveAValueToReturn { 
     return TheValueToReturn 
    } 

    return nil 
    // in case of optional AnyObject, you are allowed to return nil 

} 
+2

Собственно, вместо вашего комментария вы должны написать ** return nil ** –

+0

@appzYourLife, вы на самом деле правы, в случае дополнительного AnyObject вам разрешено return nil, я собираюсь отредактировать его –

+0

Хорошо, просто чтобы было ясно, что оператор возврата требуется в каждой ветви вашей функции. –

Смежные вопросы