“@UIApplicationMain” có nghĩa là gì?


82

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

...
import UIKit
import CoreData

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

Câu trả lời:


134

Các @UIApplicationMainthuộc tính trong Swift thay thế tầm thường main.mtậ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 mainchứ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để đá ra khỏi vòng lặp chạy Cocoa Touch và cơ sở hạ tầng ứng dụng).

Trong Objective-C, bit (heh) chính của cấu hình mỗi ứng dụng mà UIApplicationMainhàm cung cấp đang 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 UIApplicationđối tượng được chia sẻ . Trong Swift, bạn có thể dễ dàng định lớp này bằng cách thêm các @UIApplicationMainthuộc tính cho rằng lớp học khai. (Bạn cũng có thể gọi UIApplicationMainhàm trực tiếp nếu bạn có lý do. Trong Swift, bạn đặt lệnh gọi đó trong mã cấp cao nhất trong một main.swifttệp.)

@UIApplicationMainchỉ dành cho iOS. Trong OS X, ủy nhiệm ứng dụng theo truyền thống được đặt trong tệp nib chính do Info.plist chỉ định (tương tự cho Swift như đối với objC) - nhưng với bảng phân cảnh OS X không có tệp nib chính, @NSApplicationMainđiều tương tự ở đó cũng vậy.


1
Ở trang 58 trong Ngôn ngữ lập trình Swift, tôi thấy phần Thuộc tính, rất thú vị.
János

1
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ỳ tài liệu nào cho thuộc tính này. Các thuộc tính trang web mà bạn tìm thấy là nơi bạn có thể sẽ tìm thấy nó.
rickster

3
Một mô tả cho UIApplicationMainlà ở đó bây giờ. developer.apple.com/library/ios/documentation/Swift/Conceptual/…
Quinn Taylor

2
Hãy nhắc lại câu cuối cùng của bạn, lưu ý rằng OS X có @NSApplicationMain tương đương
Bill

@UIApplicationMain cũng dành cho tvOS
Shaked Sayag

7

Thuộc tính @UIApplicationMain là sự thay thế của tệp main.m & và điểm nhập để ứng dụng của bạn bắt đầu.

Một điều nữa mà chương trình của bạn có thể hoạt động mà không có @UIApplicationMain này, tất cả những gì bạn cần làm là comment // @ 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 đầu vào 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
Nếu tôi làm điều đó, nó sẽ biên dịch và chạy, nhưng kết thúc sau khi cài đặt ứng dụng và sendEvent sẽ không bao giờ được gọi. Vậy thì sao? :)
StuFF mc

Xem thêm thông tin ở đây: stackoverflow.com/questions/24020000/... - nhưng một lần nữa tôi không hạ cánh trong sendEvent ...
thứ mc

@StuFFmc cảm ơn vì thông tin này. Tôi cũng không gọi được phương thức sendEvent.
dellos

2
Việc Foundationnhập, nhập, FLApplicationphân lớp ngẫu nhiên mà không khai báo bất kỳ cách sử dụng nào của lớp con ... Xin lỗi, không câu trả lời nào trong số này có ý nghĩa ngoại trừ câu đầu tiên.
ephemer

7

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

  • Nó tạo ra điểm vào ứng dụng của bạn và một vòng chạy cung cấp các 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 thuộc tính UIApplicationMain (@UIApplicationMain) , xuất hiện ở phía trên cùng của tệp. UIApplicationMain tạo một đối tượng ứng dụng chịu trách nhiệm quản lý vòng đời của ứng dụng và một đối tượng ủy quyền ứng dụng.

  • Nó định nghĩa lớp AppDelegate , bản thiết kế cho đối tượng ủy quyền ứng dụng. Người đại diện ứng dụng 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 các chuyển đổi 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.


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

3

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

NSApplicationMain

Áp dụng thuộc tính này cho một lớp để chỉ ra rằng nó là đại biểu ứng dụng. 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 có 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


0

@UIApplicationMain là một thuộc tính được áp dụng cho lớp - được khai báo bên dưới- AppDelegate , để cung cấp thêm thông tin về lớp này.

Trong trường hợp này, thuộc tính @UIApplicationMain chỉ ra rằng lớp AppDelegate là đạ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 để chỉ ra rằng nó là đại biểu ứng dụng. 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. (Nguồn)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.