Điểm vào của thực thi mã nhanh là gì?


105

Không có main()phương pháp nào nhanh chóng. Chương trình phải bắt đầu thực thi từ một nơi nào đó. Vậy điểm vào của thực thi mã nhanh là gì và nó được quyết định như thế nào?

Câu trả lời:


94

Điểm vào trong một mô-đun Swift thuần túy là tệp trong mô-đun được gọi main.swift. main.swiftlà tệp duy nhất được phép có các biểu thức và câu lệnh ở cấp cao nhất (tất cả các tệp Swift khác trong mô-đun chỉ có thể chứa các khai báo).

Cocoa Touch sử dụng @UIApplicationMainthuộc tính trên một triển khai UIApplicationDelegatethay vì một main.swifttệp để đánh dấu điểm nhập. Cocoa đã từng sử dụng một main.swifttệp tối thiểu được gọi đơn giản NSApplicationMain, nhưng kể từ Xcode 6.1 sử dụng @NSApplicationMainthuộc tính khi triển khai NSApplicationDelegate.


4
Tôi đã tạo một dự án xcode mới và tôi không thể tìm thấy main.swifttệp ở bất kỳ đâu. Vị trí của tệp này là gì?
Selvin

Trong Cocoa và ứng dụng Cocoa Touch main.swiftnằm trong nhóm Tệp hỗ trợ và được cấu hình đơn giản để gọi NSApplicationMain.
nathan

4
Không, nó không có trong nhóm tệp hỗ trợ. Nó không có ở bất cứ đâu trong dự án.
Selvin

1
Xin lỗi, tôi đã sai về Cocoa Touch nhưng đúng về Cocoa. Xem câu trả lời của tôi được cập nhật
nathan

Tất nhiên, ngay cả trong Cocoa Touch bạn cũng có thể tạo và sử dụng main.swift.
Sulthan

40

Trong AppDelegate.swifttệp bạn có thể thấy @UIApplicationMain.
AppDelegate là tệp mục nhập ban đầu.

Về cơ bản: main.mAppDelegate.mđược hợp nhất SwiftthànhAppDelegate.swift


2
@nathan Anh ấy đã gắn thẻ iOS8 , điều đó xảy ra Cocoa-Touch, câu trả lời của tôi là đúng.

Thật tuyệt, tôi đã tự hỏi làm thế nào tôi có thể thay đổi main.m thành nhanh chóng và tôi không tìm thấy một thứ nào.
Jalil

28

Bạn có thể muốn đọc Tệp và Khởi tạo

Ngoại lệ là một tệp đặc biệt có tên “main.swift”, hoạt động giống như tệp sân chơi nhưng được tạo bằng mã nguồn ứng dụng của bạn. Tệp “main.swift” có thể chứa mã cấp cao nhất và các quy tắc phụ thuộc vào thứ tự cũng được áp dụng. Trên thực tế, dòng mã đầu tiên chạy trong “main.swift” được định nghĩa ngầm định là điểm vào chính của chương trình. Điều này cho phép chương trình Swift tối thiểu là một dòng duy nhất - miễn là dòng đó nằm trong “main.swift”.

Trong Xcode, các mẫu Mac mặc định bao gồm một tệp “main.swift”, nhưng đối với các ứng dụng iOS, mặc định cho các mẫu dự án iOS mới là thêm @UIApplicationMain vào một tệp Swift thông thường. Điều này khiến trình biên dịch tổng hợp điểm nhập chính cho ứng dụng iOS của bạn và loại bỏ nhu cầu về tệp “main.swift”.

Ngoài ra, bạn có thể liên kết trong một triển khai chính được viết bằng Objective-C, phổ biến khi chuyển dần các dự án từ Objective-C sang Swift.


3
Tôi thấy đây là một cách giải thích tốt hơn và cấp cao hơn về cách thiết lập điểm vào trong iOS.
Steven

Câu trả lời hay, và liên kết tốt. Sau đó, tôi đã tìm thấy một nơi tốt để đặt mã cần chạy "sớm". Thay vì sử dụng một trong các phương thức ủy nhiệm ứng dụng, tôi chỉ cần ghi đè init trên ủy nhiệm ứng dụng và thực hiện ở đó. Tôi đã sử dụng nó, ví dụ: để thiết lập mức ghi nhật ký mặc định.
charles

1

Trong ứng dụng Swift có các thuộc tính:

  • @UIApplicationMain (Cocoa Touch)
  • @NSApplicationMain (Ca cao)

cho trình biên dịch nhanh biết đâu là điểm vào của ứng dụng.

Những gì trình biên dịch nhanh thực hiện là nó tạo ra một mainhàm, về cơ bản trông giống như trong các ứng dụng Objective-C và coi phương thức này như là điểm vào của ứng dụng (một phương thức đầu tiên được gọi khi quá trình ứng dụng được bắt đầu).

Nếu bạn muốn đọc thêm về trình biên dịch nhanh làm gì với Maincác thuộc tính, cách hệ điều hành biết đâu là điểm nhập của ứng dụng, tôi khuyến khích bạn đọc bài viết này: Tìm hiểu về điểm nhập ứng dụng iOS


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.