Все о типах ... Хорошо, давайте рассмотрим код ...
case 1: @Published var foo: Int
на самом деле
var foo: Int
var _foo: Published<Int>
так
init() {
self.foo = 1 // << Initialization
}
дело 2: @Published var foo: Int!
(то же самое будет для @Published var foo: Int?
)
на самом деле
var foo: Int!
var _foo: Published<Int?> // !! Not primitive - generics class, types differ
так
init() {
self.foo = 1 // << Assignment of Int(1)
}
Таким образом, ИМО, ответ - да, это что-то особенное в @Published.
Примечание : Вы можете видеть все изображение во время выполнения, если установить точку останова на линии self.foo = 1
и использовать ^ F7 (Control-Step Into), чтобы выполнить инструкции для обоих случаев ... очень интересные внутренности.