Назад к вопросам
Middle
80
questionbank
Что произойдет, если класс будет помечен как Objective-C?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Класс, помеченный атрибутом @objc, становится доступным из Objective-C кода. Это обеспечивает интероперабельность между Swift и Objective-C.
Ключевые аспекты:
- Доступность из Objective-C: Методы, свойства и инициализаторы этого класса могут быть вызваны из Objective-C.
- Динамическая диспетчеризация:
@objcчасто подразумевает динамическую диспетчеризацию, то есть вызов метода определяется во время выполнения, а не во время компиляции. Это необходимо для некоторых Objective-C фич, таких как Key-Value Observing (KVO), Objective-C Runtime и@dynamic. - Наследование от
NSObject: Чтобы класс был полностью доступен из Objective-C, он обычно должен наследоваться отNSObject. Классы, не наследующие отNSObject, также могут быть помечены@objc, но их функциональность в Objective-C может быть ограничена. - Селекторы: Методы
@objcклассов могут использоваться с селекторами (#selector), что критично для Target-Action паттерна, NSTimer и NotificationCenter в стиле Objective-C. - Переименование: При экспорте в Objective-C имена Swift классов, методов и свойств могут быть изменены. Атрибут
@objcпозволяет явно указывать имя Objective-C с помощью@objc(<ObjCName>).
Пример:
import Foundation
@objc(MySwiftClass) // Explicitly name it MySwiftClass in Objective-C
class MyClass: NSObject {
@objc var myProperty: Int = 0 // Accessible from Objective-C
@objc func myMethod(value: Int) { // Accessible from Objective-C
print("Value: \(value)")
}
// Not accessible as a method from Objective-C by default
func swiftOnlyMethod() {
print("Swift only")
}
}
В результате этот Swift класс будет виден в Objective-C как MySwiftClass с доступными свойствами myProperty и методом myMethodWithIntValue:.