2014-07-01 26 views
50

Tôi vừa tạo dự án Swift đầu tiên của mình, trong số AppDelegate.swift có một dòng phía trên khai báo lớp - tại sao nó lại ở đó ?!"@UIApplicationMain" nghĩa là gì?

... 
import UIKit 
import CoreData 

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

Trả lời

78

Các @UIApplicationMain thuộc tính trong Swift thay thế tầm thường main.m tập tin được tìm thấy trong các dự án Objective-C (mà mục đích là để thực hiện các main chức năng đó là điểm mấu chốt cho tất cả các chương trình C và gọi UIApplicationMain để khởi động chạy Cocoa Touch cơ sở hạ tầng ứng dụng và vòng lặp).

Trong Mục tiêu-C, bit chính (heh) của cấu hình mỗi ứng dụng mà chức năng UIApplicationMain cung cấp là chỉ định một trong các lớp tùy chỉnh của ứng dụng của bạn làm đại biểu của đối tượng được chia sẻ UIApplication. Trong Swift, bạn có thể dễ dàng chỉ định lớp này bằng cách thêm the @UIApplicationMain attribute vào khai báo lớp đó. (Bạn vẫn có thể gọi hàm UIApplicationMain trực tiếp nếu bạn có lý do. Trong Swift bạn đặt cuộc gọi đó ở mã cấp cao nhất trong tệp main.swift.)

@UIApplicationMain chỉ dành cho iOS. Trong OS X, ủy nhiệm ứng dụng truyền thống được đặt trong tệp nib chính được chỉ định bởi Info.plist (giống với Swift cho ObjC) - nhưng với bảng điều khiển OS X không có tệp nib chính, vì vậy @NSApplicationMain cũng làm như vậy.

+0

Trên trang 58 trong Ngôn ngữ lập trình Swift tôi thấy phần Thuộc tính, thú vị. –

+0

Tôi đã trích dẫn các tài liệu trong câu trả lời của mình, nhưng dường như chưa có bất kỳ thuộc tính nào cho thuộc tính này. Trang [Thuộc tính] (https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html) mà bạn tìm thấy là nơi bạn có thể * sẽ * tìm thấy nó. – rickster

+3

Mô tả cho 'UIApplicationMain' hiện đã có. https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html –

6

@UIApplicationTính chất chính là thay thế tệp main.m & và điểm nhập cho ứng dụng của bạn để bắt đầu.

Một điều nữa chương trình của bạn có thể hoạt động mà không có @UIApplicationMain tất cả những gì bạn cần làm là nhận xét // @ UIApplicationMain` tạo main.swift giống như main.m trong mục tiêu c và viết mã bên dưới. đó sẽ là điểm mấu chốt của ứng dụng của bạn

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

tương đương Nếu tôi làm điều đó, nó biên dịch và chạy , nhưng đã hoàn thành sau khi cài đặt ứng dụng và sendEvent không bao giờ được gọi. Vậy cái gì? :) –

+0

Thông tin thêm tại đây: http://stackoverflow.com/questions/24020000/subclass-uiapplication-with-swift - nhưng một lần nữa tôi không truy cập vào sendEvent ... –

+0

@StuFFmc cảm ơn thông tin này. phương thức sendEvent không được gọi cho tôi nữa. – dellos

0

@UIApplicationMain là một thuộc tính áp dụng cho các lớp -declared liệt kê dưới đây appdelegate, để cung cấp thêm thông tin về lớp học này.

Trong trường hợp này, các thuộc tính @UIApplicationMain chỉ ra rằng lớp appdelegate là các đại biểu ứng dụng của ứng dụng của bạn.

0

UIApplicationMain Áp dụng thuộc tính này cho một lớp để cho biết rằng đó là ứng dụng được ủy quyền. Sử dụng thuộc tính này tương đương với việc gọi hàm UIApplicationMain và chuyển tên của lớp này làm tên của lớp đại biểu. (Source)

4

Các AppDelegate.swift file nguồn có hai chức năng chính:

  • Nó tạo ra điểm mấu chốt để ứng dụng của bạn và một vòng lặp chạy mang sự kiện đầu vào cho ứng dụng của bạn. Công việc này được thực hiện bởi UIApplicationMain thuộc tính (@UIApplicationMain), xuất hiện phía trên cùng của tập tin .UIApplicationMain tạo đối tượng ứng dụng là chịu trách nhiệm quản lý vòng đời của ứng dụng và ứng dụng đối tượng đại biểu.

  • Định nghĩa lớp AppDelegate, kế hoạch chi tiết cho đối tượng ủy nhiệm ứng dụng. Ứng dụng ủy nhiệm tạo cửa sổ nơi nội dung ứng dụng của bạn được vẽ và cung cấp một nơi để phản hồi chuyển tiếp trạng thái trong ứng dụng. Lớp AppDelegate là nơi bạn viết mã cấp ứng dụng tùy chỉnh của mình.

+0

Hey @Manju ....... Tôi đã ghi đè chính UIApplication của tôi là TimerUiApplication ............. Tôi có một biến trong đó .......... Làm thế nào để tôi sửa đổi biến UIApplication của tôi từ uiViewController của tôi ..................... – Cloy

2

Bây giờ tài liệu Swift được cập nhật, đây là những đoạn văn có liên quan:

NSApplicationMain

Áp dụng thuộc tính này để một lớp học để chỉ ra rằng nó là ứng dụng đại biểu. Sử dụng thuộc tính này tương đương với việc gọi hàm NSApplicationMain (: :) và chuyển tên của lớp này làm tên của lớp đại biểu.

Nếu bạn không sử dụng thuộc tính này, hãy cung cấp tệp main.swift với hàm main() gọi hàm NSApplicationMain (: :). Ví dụ: nếu ứng dụng của bạn sử dụng lớp con tùy chỉnh của NSApplication làm lớp chính của nó, hãy gọi hàm NSApplicationMain thay vì sử dụng thuộc tính này.

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