Атрибуты
Атрибуты предоставляют больше информации об объявлении или типе. Существует два вида атрибутов в Swift, те, которые применяются к объявлениям и тем, которые применяются к типам.
Вы указываете атрибут путем записи @ символ, сопровождаемый именем атрибута и любыми параметрами, что атрибут принимает:
@attribute name
@attribute name(attribute arguments)
Некоторые атрибуты объявления принимают параметры, указывающие больше информации об атрибуте и как это применяется к определенному объявлению. Эти параметры атрибута включаются в круглые скобки, и их формат определяется атрибутом, которому они принадлежат.
Атрибуты объявления
Можно применить атрибут объявления к объявлениям только. Однако можно также применяться noreturn припишите функциональному или типу метода.
availabilityПримените этот атрибут к любому объявлению для указания жизненного цикла объявления относительно определенных платформ и версий операционной системы.
availabilityатрибут всегда появляется со списком двух или больше разделенных от запятой параметров атрибута. Эти параметры начинаются с одного из следующих имен платформы:iOS,iOSApplicationExtension,OSX, илиOSXApplicationExtension. Можно также использовать звездочку (*) указать доступность объявления по всем упомянутым выше именам платформы. Остающиеся параметры могут появиться в любом порядке и указать дополнительную информацию о жизненном цикле объявления, включая важные этапы.unavailableпараметр указывает, что объявление не доступно на указанной платформе.introducedпараметр указывает первую версию указанной платформы, в которой было представлено объявление. Это имеет следующую форму:introduced=version number
Номер версии состоит из положительного целочисленного или десятичного числа с плавающей точкой.
deprecatedпараметр указывает первую версию указанной платформы, в которой осуждалось объявление. Это имеет следующую форму:deprecated=version number
Номер версии состоит из положительного целочисленного или десятичного числа с плавающей точкой.
obsoletedпараметр указывает первую версию указанной платформы, в которой объявление было obsoleted. Когда объявление является obsoleted, оно удалено из указанной платформы и больше не может использоваться. Это имеет следующую форму:obsoleted=version number
Номер версии состоит из положительного целочисленного или десятичного числа с плавающей точкой.
messageпараметр используется для обеспечения текстового сообщения, это выведено на экран компилятором при испускании предупреждения или ошибки об использовании осуждаемого или obsoleted объявления. Это имеет следующую форму:message=message
Сообщение состоит из строкового литерала.
renamedпараметр используется для обеспечения текстового сообщения, указывающего новое имя для объявления, в которое это было переименовано. Новое имя выведено на экран компилятором при испускании ошибки об использовании переименованного объявления. Это имеет следующую форму:renamed=new name
Новое имя состоит из строкового литерала.
Можно использовать
renamedпараметр в сочетании сunavailableпараметр и объявление альтернативного имени типа, чтобы указать клиентам Вашего кода, что было переименовано объявление. Например, когда имя объявления изменено между выпусками платформы или библиотеки, это полезно.// First releaseprotocol MyProtocol {// protocol definition}
// Subsequent release renames MyProtocolprotocol MyRenamedProtocol {// protocol definition}@availability(*, unavailable, renamed="MyRenamedProtocol")typealias MyProtocol = MyRenamedProtocol
Можно применяться многократный
availabilityатрибуты на единственном объявлении для указания доступности объявления на различных платформах. Компилятор используетavailabilityприпишите только, когда атрибут указывает платформу, соответствующую текущую целевую платформу.
autoclosureЭтот атрибут используется для задержки оценки выражения путем автоматического обертывания того выражения в закрытие без параметров. Примените этот атрибут к объявлению параметра для функционального или типа метода, не берущего параметров, и это возвращает тип выражения. Объявления с
autoclosureатрибут подразумеваетnoescapeтакже, кроме тех случаев, когда переданный дополнительный параметр атрибутаescaping. Для примера того, как использоватьautoclosureприпишите, посмотрите Функциональный Тип.noescapeПримените этот атрибут к объявлению функции или объявлению метода, чтобы указать, что параметр, это не будет сохранено для более позднего выполнения, такого, что это, как гарантируют, не переживет время жизни вызова. Функциональные параметры типа с
noescapeатрибут объявления не требует явного использованияself.для свойств или методов.noreturnПримените этот атрибут к объявлению функции или объявлению метода, чтобы указать что соответствующий тип той функции или метода,
T,@noreturn T. Можно отметить функциональный или тип метода с этим атрибутом, чтобы указать, что функция или метод не возвращаются к его вызывающей стороне.Можно переопределить функцию или метод, не отмеченный с
noreturnатрибут с функцией или методом, который является. Однако Вы не можете переопределить функцию или метод, отмеченный сnoreturnатрибут с функцией или методом, который не является. Подобные правила применяются при реализации метода протокола в соответствующем типе.NSApplicationMainПримените этот атрибут к классу, чтобы указать, что это - делегат приложения. Используя этот атрибут эквивалентно вызову
NSApplicationMainфункционируйте и передающий имя этого класса как имя класса делегата.Если Вы не используете этот атрибут, предоставьте a
main.swiftфайл с amainфункция, вызывающаяNSApplicationMainфункция. Например, если Ваше приложение использует пользовательский подклассNSApplicationкак его основной класс, вызовитеNSApplicationMainфункция вместо того, чтобы использовать этот атрибут.NSCopyingПримените этот атрибут к сохраненному переменному свойству класса. Этот атрибут заставляет метод set свойства синтезироваться с копией значения свойства — возвращенный
copyWithZone(_:)метод — вместо значения самого свойства. Тип свойства должен соответствоватьNSCopyingпротокол.NSCopyingатрибут ведет себя в пути, подобном Objective Ccopyатрибут свойства.
NSManagedПримените этот атрибут к сохраненному переменному свойству класса, наследовавшегося от
NSManagedObjectуказать, что хранение и реализация свойства предоставлены динамично Базовыми Данными во время выполнения на основе связанного описания объекта.objcПримените этот атрибут к любому объявлению, которое может быть представлено в Objective C — например, невложенные классы, протоколы, неуниверсальные перечисления (ограниченный к целочисленным типам необработанного значения), свойства и методы (включая методов get и методы set) классов и протоколов, инициализаторов, deinitializers, и нижних индексов.
objcатрибут говорит компилятору, что объявление доступно для использования в коде Objective C.Если Вы применяетесь
objcприпишите классу или протоколу, это неявно применилось к элементам того класса или протокола. Компилятор также неявно добавляетobjcприпишите классу, наследовавшемуся от другого класса, отмеченного сobjcатрибут. Протоколы, отмеченные сobjcатрибут не может наследоваться из протоколов, которые не являются.Если Вы применяетесь
objcприпишите перечислению, каждый случай перечисления представлен коду Objective C как связь имени перечисления и имени случая. Например, случай называютVenusв SwiftPlanetперечисление представлено коду Objective C как названный случайPlanetVenus.objcатрибут дополнительно принимает единственный параметр атрибута, состоящий из идентификатора. Используйте этот атрибут, когда Вы захотите представить другое имя к Objective C для объектаobjcатрибут применяется к. Можно использовать этот параметр для именования классов, протоколов, методов, методов get, методов set и инициализаторов. Пример ниже представляет метода get дляenabledсвойствоExampleClassк Objective C кодируют какisEnabledвместо так же, как имя самого свойства.@objcclass ExampleClass {var enabled: Bool {@objc(isEnabled) get {// Return the appropriate value}}}
UIApplicationMainПримените этот атрибут к классу, чтобы указать, что это - делегат приложения. Используя этот атрибут эквивалентно вызову
UIApplicationMainфункционируйте и передающий имя этого класса как имя класса делегата.Если Вы не используете этот атрибут, предоставьте a
main.swiftфайл с amainфункция, вызывающаяUIApplicationMainфункция. Например, если Ваше приложение использует пользовательский подклассUIApplicationкак его основной класс, вызовитеUIApplicationMainфункция вместо того, чтобы использовать этот атрибут.
Атрибуты объявления, используемые интерфейсным разработчиком
Взаимодействуйте через интерфейс атрибуты Разработчика являются атрибутами объявления, используемыми Интерфейсным Разработчиком для синхронизации с XCode. Swift обеспечивает следующие Интерфейсные атрибуты Разработчика: IBAction, IBDesignable, IBInspectable, и IBOutlet. Эти атрибуты являются концептуально тем же как своими дубликатами Objective C.
Вы применяетесь IBOutlet и IBInspectable атрибуты к объявлениям свойства класса. Вы применяетесь IBAction припишите объявлениям метода класса и IBDesignable припишите объявлениям класса.
Атрибуты типа
Можно применить атрибуты типа к типам только. Однако можно также применяться noreturn припишите объявлению функции или объявлению метода.
noreturnПримените этот атрибут к типу функции или метода, чтобы указать, что функция или метод не возвращаются к его вызывающей стороне. Можно также отметить объявление функции или объявление метода с этим атрибутом, чтобы указать что соответствующий тип той функции или метода,
T,@noreturn T.
Грамматика атрибута
атрибут
→ @«пункт параметра атрибута названия атрибута выбирает»
название атрибута → идентификатор -
пункт параметра атрибута
→ («сбалансированные маркеры выбирают»)
сбалансированные маркеры → «сбалансированный маркер балансировались, маркеры выбирают»
сбалансированный маркер
→ («сбалансированные маркеры выбирают»)
сбалансированный маркер
→ [«сбалансированные маркеры выбирают»]
сбалансированный маркер
→ {«сбалансированные маркеры выбирают»}
сбалансированный маркер → Любой идентификатор, ключевое слово, литерал или оператор
сбалансированный маркер
→ Любая пунктуация кроме (, ), [, ], {, или }
