"@UIApplicationMain" ne anlama geliyor?


83

İlk Swift projemi yeni oluşturdum, AppDelegate.swiftsınıf bildiriminin üzerinde bir satır var - neden orada ?!

...
import UIKit
import CoreData

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

Yanıtlar:


136

@UIApplicationMainSwift öznitelik önemsiz değiştirir main.mdosya (görevi uygulamaktır Objective-C projelerinde bulunan maintüm C programları ve çağrı için giriş noktası var fonksiyonunu UIApplicationMainKakao Dokunmatik çalışma döngüsü ve uygulama altyapısı kapalı tekme kadar).

Objective-C'de, UIApplicationMainişlevin sağladığı uygulama başına yapılandırmanın ana (heh) biti, uygulamanızın özel sınıflarından birini paylaşılan UIApplicationnesnenin temsilcisi olarak belirlemektir . Swift, kolayca ekleyerek bu sınıfını atayabilir niteliğini o sınıf bildirisine. (Bir nedeniniz varsa , yine de işlevi doğrudan çağırabilirsiniz . Swift'de bu aramayı bir dosyadaki en üst düzey koda koyarsınız .)@UIApplicationMainUIApplicationMainmain.swift

@UIApplicationMainyalnızca iOS içindir. OS X'te, uygulama temsilcisi geleneksel olarak Info.plist tarafından belirlenen ana uç dosyasında ayarlanır (Swift için ObjC ile aynıdır) - ancak OS X görsel senaryo taslaklarında ana uç dosyası @NSApplicationMainyoktur, orada da aynı şeyi yapar.


1
Swift Programlama Dili'nin 58. sayfasında Öznitelikler bölümünü ilginç buldum.
János

1
Cevabımda dokümanlardan alıntı yapmış olurdum, ancak henüz bu özellik için herhangi bir belge yok gibi görünüyor. Bulduğunuz Öznitelikler sayfası, muhtemelen onu bulacağınız yerdir .
rickster

3
İçin bir açıklama UIApplicationMainvar şimdi. developer.apple.com/library/ios/documentation/Swift/Conceptual/…
Quinn Taylor

2
Son cümleniz yeniden, OS X'in @NSApplicationMain
Bill

@UIApplicationMain aynı zamanda tvOS için
Shaked Sayag

7

@UIApplicationMain özniteliği, uygulamanızın başlaması için main.m dosyasının ve giriş noktasının yerine geçer.

Programınızın bu @UIApplicationMain olmadan çalışabileceği bir şey daha yapmanız gereken tek şey comment // @ UIApplicationMain` hedef c'de main.m ile aynı main.swift'i oluşturun ve aşağıdaki kodu yazın. bu, başvurunuzun giriş noktası olacak

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

1
Bunu yaparsam, derler ve çalışır, ancak uygulamayı yükledikten sonra tamamlanır ve sendEvent asla çağrılmaz. Ne olmuş yani? :)
StuFF mc


@StuFFmc bu bilgi için teşekkür ederim. sendEvent yöntemi benim için de çağrılmadı.
dellos

2
Foundationİthalat, FLApplication, tüm alt sınıflar kullanarak bildirmek olmadan rastgele subclassing ... Maalesef bu yanıt hiçbiri ilk cümlesinde hariç mantıklı.
efemer

7

AppDelegate.swift kaynak dosyası iki temel işlevi vardır:

  • Uygulamanıza giriş noktası ve uygulamanıza giriş olaylarını ileten bir çalışma döngüsü oluşturur. Bu çalışma ile yapılır UIApplicationMain özniteliği (@UIApplicationMain) dosyasının en doğru görünen,. UIApplicationMain, uygulamanın yaşam döngüsünü ve bir uygulama temsilcisi nesnesini yönetmekten sorumlu bir uygulama nesnesi oluşturur.

  • Uygulama temsilcisi nesnesinin planı olan AppDelegate sınıfını tanımlar . Uygulama temsilcisi, uygulamanızın içeriğinin çizildiği pencereyi oluşturur ve uygulama içindeki durum geçişlerine yanıt vermek için bir yer sağlar. AppDelegate sınıfı, özel uygulama düzeyinde kodunuzu yazdığınız yerdir.


Hey @Manju ....... TimerUiApplication olarak ana UIApplication'ımı geçersiz kıldım ............. İçinde bir değişkenim var .......... Nasıl yaparım uiViewController'ımdan UIApplication değişkenimin bu değişkenini değiştir .....................
2016

3

Swift dokümantasyonu güncellendiğine göre, işte ilgili pasaj:

NSApplicationMain

Uygulama temsilcisi olduğunu belirtmek için bu özniteliği bir sınıfa uygulayın. Bu özniteliğin kullanılması, NSApplicationMain ( : :) işlevini çağırmaya ve bu sınıfın adını temsilci sınıfının adı olarak iletmeye eşdeğerdir .

Bu özniteliği kullanmazsanız, NSApplicationMain ( : :) işlevini çağıran main () işlevine sahip bir main.swift dosyası sağlayın . Örneğin, uygulamanız ana sınıfı olarak NSApplication'ın özel bir alt sınıfını kullanıyorsa, bu özniteliği kullanmak yerine NSApplicationMain işlevini çağırın.

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


0

@UIApplicationMain , bu sınıf hakkında daha fazla bilgi sağlamak için AppDelegate altında belirtilen sınıfa uygulanan bir özniteliktir .

Bu durumda, nitelik @UIApplicationMain sınıfı gösterir AppDelegate uygulamanızın uygulama delege.


0

UIApplicationMain Uygulama temsilcisi olduğunu belirtmek için bu özniteliği bir sınıfa uygulayın. Bu niteliği kullanmak, UIApplicationMain işlevini çağırmaya ve bu sınıfın adını temsilci sınıfının adı olarak iletmeye eşdeğerdir. (Kaynak)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.