swift - Nonfailable enum initializer with default value -
is there way define enum, when initialized rawvalue default value instead of failing? useful in cases value may unexpected (i.e. server api errors)
you mean that?
enum errorcode: int { case noerr = 0, err1, err2, lasterr, defaulterr init(value: int) { if (value > lasterr.rawvalue) { self = .defaulterr } else { self = errorcode(rawvalue: value)! } } } let error: errorcode = .lasterr let anothererror: errorcode = errorcode(value: 99) here variation:
enum errorcode: int { case noerr = 0, err1, err2, lasterr init?(value: int) { if (value > 3) { return nil } else { self = errorcode(rawvalue: value)! } } } let error: errorcode = .lasterr let anothererror: errorcode? = errorcode(value: 99) which equivalent :
enum errorcode: int { case noerr = 0, err1, err2, lasterr } let anothererror: errorcode? = errorcode(rawvalue: 99) because apple doc stating:
note
the raw value initializer failable initializer, because not every raw value return enumeration member. more information, see failable initializers.
but in general, if want use enum rawvalue, should expect optional , treat nil returned value default error case outside enum definition. recommendation.
Comments
Post a Comment