В классе NotificationCenter, почему Apple создала Observer типа Any.
Потому что все Объектив-C id
декларации переводятся в Swift как Any.
Вы можете возразить, что это действительно должен быть AnyObject, потому что здесь будет работать только класс. И действительно, именно так id
раньше переводили на Свифт. Но в настоящее время вы можете передать все, где ожидается id
, потому что, если Objective-C не может этого понять, он будет упакован как экземпляр класса (например, как _SwiftValue
), чтобы можно было выполнить округление. -поездка в Objective-C и обратно в Swift. Поэтому id
переводится как Any.
Однако, только то, что вы можете передать структуру здесь, не означает, что вы должны это сделать. Это не сработает, как вы обнаружили. Objective-C не может анализировать структуру Swift.
Есть лотов подобных ситуаций, когда Какао дает вам достаточно места, чтобы повеситься, пропустив не ту вещь. contents
CALayer набирается как Any, но если вы передадите что-либо кроме CGImage, ничего не произойдет. layerClass
, если UIView имеет тип AnyClass, но вам лучше передать подкласс CALayer. Я мог бы продолжать и продолжать.