Можно ли использовать @objc в структуре? Почему?
Суть
Нет. @objc делает член видимым для Objective-C runtime, а тот умеет работать только с объектами: указатель isa на класс, таблица методов класса, поиск по селектору через objc_msgSend. У структуры ничего этого нет — это value-тип, который лежит прямо на стеке или внутри другого значения, копируется побитово и не имеет идентичности. Компилятор так и скажет: '@objc' can only be used with members of classes, @objc protocols, and concrete extensions of classes.
import Foundation
struct Point { var x = 0.0, y = 0.0 }
// @objc struct Point {} // error: '@objc' can only be applied
// // to classes
// struct S { @objc func f() {} } // error: '@objc' can only be used
// // with members of classes...
final class PointBox: NSObject { // мост для Obj-C: оборачиваем в класс
let point: Point
init(_ point: Point) { self.point = point }
@objc var x: Double { point.x }
}
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep