Атрибуты
Атрибуты предоставляют больше информации об объявлении или типе. Существует два вида атрибутов в 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 release
protocol MyProtocol {
// protocol definition
}
// Subsequent release renames MyProtocol
protocol 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
вместо так же, как имя самого свойства.@objc
class 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
.
Грамматика атрибута
атрибут
→ @
«пункт параметра атрибута названия атрибута выбирает»
название атрибута → идентификатор -
пункт параметра атрибута
→ (
«сбалансированные маркеры выбирают»)
сбалансированные маркеры → «сбалансированный маркер балансировались, маркеры выбирают»
сбалансированный маркер
→ (
«сбалансированные маркеры выбирают»)
сбалансированный маркер
→ [
«сбалансированные маркеры выбирают»]
сбалансированный маркер
→ {
«сбалансированные маркеры выбирают»}
сбалансированный маркер → Любой идентификатор, ключевое слово, литерал или оператор
сбалансированный маркер
→ Любая пунктуация кроме (
, )
, [
, ]
, {
, или }