Що означає “@UIApplicationMain”?


83

Я щойно створив свій перший проект Swift, AppDelegate.swiftтам є рядок над оголошенням про клас - чому він там ?!

...
import UIKit
import CoreData

@UIApplicationMain // <- WHY IS IT HERE?
class AppDelegate: UIResponder, UIApplicationDelegate {
... 

Відповіді:


136

@UIApplicationMainАтрибут Swift замінює тривіальний main.mфайл знайдений в проектах Objective-C (чия мета полягає в тому, щоб реалізувати mainфункцію , що це точка входу для всіх програм C і виклик UIApplicationMainдля початку циклу виконання Cocoa Touch і додаток інфраструктури).

У Objective-C основним (хех) бітом конфігурації для кожного додатка, який UIApplicationMainнадає функція, є призначення одного зі спеціальних класів вашого додатка як делегата спільного UIApplicationоб'єкта. В Swift, ви можете легко призначити цей клас, додаючи в @UIApplicationMainатрибут до цього класу декларації. (Ви також можете запустити UIApplicationMainфункцію безпосередньо, якщо у вас є на те причини. У Swift ви поміщаєте цей виклик у код верхнього рівня у main.swiftфайлі.)

@UIApplicationMainпризначений лише для iOS. В OS X делегат програми традиційно встановлюється у головному файлі перемикача, призначеному Info.plist (те саме для Swift, що і для ObjC), - але в раскадровках OS X немає основного файлу переходу, тому @NSApplicationMainце робить те саме.


1
На сторінці 58 у "Швидкій мові програмування" мені здався цікавим розділ "Атрибути".
Янос

1
Я б цитував документи у своїй відповіді, але, здається, поки що немає таких атрибутів. Атрибути сторінки , яку ви знайшли, де ви , ймовірно , буде його знайти.
rickster


2
Щодо останнього речення, зверніть увагу, що OS X має еквівалент @NSApplicationMain
Білл

@UIApplicationMain також для tvOS
Shaked Sayag

7

Атрибут @UIApplicationMain - це заміна файлу main.m та точки входу для запуску вашої програми.

Ще одна річ, з якою ваша програма може працювати без цього @UIApplicationMain, все, що вам потрібно зробити, - це коментувати // @ UIApplicationMain` створити main.swift так само, як main.m в цілі c і написати код нижче. це буде точкою входу вашої заявки

import Foundation
class FLApplication: UIApplication
{
    override func sendEvent(event: UIEvent!)
    {
        println("Entry Point") // this is an example
    }
}

1
Якщо я це роблю, він компілюється та запускається, але закінчується після встановлення програми, а sendEvent ніколи не викликається. І що? :)
StuFF mc

Більше інформації тут: stackoverflow.com/questions/24020000/… - але знову ж таки я не потрапляю в sendEvent ...
StuFF mc

@StuFFmc дякую за цю інформацію. метод sendEvent також не викликався для мене.
dellos

2
FoundationІмпорту, то FLApplicationвипадкові підкласи без оголошення який - або допомоги підкласу ... Вибачте, але жоден з цієї відповіді не мають сенс першого речення , за виключення.
ефемер

7

AppDelegate.swift вихідний файл має дві основні функції:

  • Він створює точку входу у ваш додаток і цикл запуску, який забезпечує вхідні події для вашого додатка. Цю роботу виконує атрибут UIApplicationMain (@UIApplicationMain) , який з’являється у верхній частині файлу. UIApplicationMain створює об'єкт програми, який відповідає за управління життєвим циклом програми та об'єкт-делегат програми.

  • Він визначає клас AppDelegate , план об'єкта делегата програми. Делегат програми створює вікно, де малюється вміст вашої програми, і забезпечує місце для реагування на переходи стану в програмі. Клас AppDelegate - це місце, де ви пишете власний код рівня програми.


Привіт @Manju ....... Я перевизначив свою основну програму UIA як TimerUiApplication ............. У мене є змінна .......... Як мені змінити цю змінну мого UIA-додатка з мого uiViewController .....................
Cloy

3

Тепер, коли документація Swift оновлена, ось відповідний уривок:

NSApplicationMain

Застосуйте цей атрибут до класу, щоб вказати, що це делегат програми. Використання цього атрибута еквівалентно виклику функції NSApplicationMain ( : :) та передачі імені цього класу як імені класу-делегата.

Якщо ви не використовуєте цей атрибут, надайте файлу main.swift функцію main (), яка викликає функцію NSApplicationMain ( : :). Наприклад, якщо ваш додаток використовує спеціальний підклас NSApplication як основний клас, викличте функцію NSApplicationMain замість використання цього атрибута.

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html


0

@UIApplicationMain - це атрибут, який застосовується до класу, оголошеного нижче - AppDelegate , щоб надати більше інформації про цей клас.

У цьому випадку атрибут @UIApplicationMain вказує, що клас AppDelegate є делегатом програми вашої програми.


0

UIApplicationMain Застосуйте цей атрибут до класу, щоб вказати, що це делегат програми. Використання цього атрибута еквівалентно виклику функції UIApplicationMain та передачі імені цього класу як імені класу-делегата. (Джерело)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.