Ответ 1
Предупреждение работает по назначению: false
возврат TestStruct() is AnyObject
, однако, не
В предыдущей версии этого ответа было обнаружено предупреждение,
'is' test всегда истинно
как ошибка, и содержал некоторое обсуждение относительно того, почему это воспринимаемое ошибочное предупреждение проявилось бы. Однако TestStruct() is AnyObject
, оцененный как false
во время выполнения, воспринимается как ожидаемое поведение.
Учитывая комментарии к отчету об ошибке поданному OP (SR-2420), ситуация выглядит наоборот: поскольку Xcode 8/beta 6, тест is
всегда должен оцениваться как true
, а ошибка сообщения OP: s заключается в том, что во время выполнения TestStruct() is AnyObject
оценивается false
.
Это правильно, потому что теперь все мосты до
AnyObject
....
is
/as
AnyObject
всегда выполняется для всех типов. Он ведет себя как предполагалось.
Новый блок SwiftValue
для преобразования значений Swift в объекты Obj-C
(для получения дополнительной информации см. обсуждение в комментариях ниже, спасибо @MartinR)
Кажется, что значения Swift, которые явно не реализованы, подлежат связыванию с объектами Obj-C через, например, соответствие _ObjectiveCBridgeable
(см., например, следующее Q & A для получения подробной информации о _ObjectiveCBridgeable
), вместо этого автоматически использует новый SwiftValue
, чтобы разрешить преобразование к объектам Obj-C.
Начальное сообщение фиксации для swift/stdlib/public/runtime/SwiftValue.mm гласит:
Runtime: реализовать непрозрачный класс ObjC SwiftValue для хранения мостовых значений
Если нет лучшего отображения для значения Swift в Objective-Cобъект для мостовых целей, мы можем вернуться к боксу в класс. Этот класс не имеет никакого открытого интерфейса, кроме
NSObject
-конформируется в Objective-C, но распознается Swift runtime, чтобы он мог динамически отбрасываться обратно в коробчатый тип.