+1 but:<div><br></div><div>I&#39;m somewhat hesistant about not marking the plausibly discarable ones @discardableResult.<div>- I rarely use the result value of removeLast() and I don&#39;t see how requiring it here adds any safety. It is obvious this call has side-effects and doesn&#39;t just return the last element.</div></div><div>- I would say the canonical way to clean-up observers would be to call removeObservers(self) in deinit to remove all of them at once. Though arguably not marking it @discardable might have some small safety benefit here.</div>