จุดเริ่มต้นของการเรียกใช้รหัสที่รวดเร็วคืออะไร?


106

ไม่มีmain()วิธีการใดที่รวดเร็ว โปรแกรมต้องเริ่มการทำงานจากที่ใดที่หนึ่ง แล้วจุดเริ่มต้นของการเรียกใช้โค้ดที่รวดเร็วคืออะไรและจะตัดสินใจอย่างไร?

คำตอบ:


94

จุดเริ่มต้นในโมดูล Swift main.swiftธรรมดาไฟล์ในโมดูลที่เรียกว่า main.swiftเป็นไฟล์เดียวที่ได้รับอนุญาตให้มีนิพจน์และคำสั่งที่ระดับบนสุด (ไฟล์ Swift อื่น ๆ ทั้งหมดในโมดูลสามารถมีการประกาศเท่านั้น)

Cocoa Touch ใช้@UIApplicationMainแอตทริบิวต์ในการนำไปใช้UIApplicationDelegateแทนmain.swiftไฟล์เพื่อทำเครื่องหมายจุดเริ่มต้น โกโก้เคยใช้main.swiftไฟล์ขนาดเล็กที่เรียกง่ายๆNSApplicationMainแต่ใน Xcode 6.1ใช้@NSApplicationMainแอตทริบิวต์ในการใช้งานNSApplicationDelegateไฟล์.


4
ฉันสร้างโปรเจ็กต์ xcode ใหม่แล้ว แต่หาmain.swiftไฟล์ไม่เจอ ตำแหน่งของไฟล์นี้คืออะไร?
Selvin

ในแอปพลิเคชัน Cocoa และ Cocoa Touch main.swiftอยู่ในกลุ่มไฟล์ที่รองรับและกำหนดค่าให้โทรNSApplicationMainได้
nathan

4
ไม่มีไม่มีในกลุ่มไฟล์สนับสนุน ไม่ใช่ที่ใดในโครงการ
Selvin

1
ขอโทษค่ะฉันพูดผิดเกี่ยวกับ Cocoa Touch แต่ถูกต้องเกี่ยวกับ Cocoa ดูคำตอบที่อัปเดตของฉัน
nathan

แน่นอนว่าแม้แต่ใน Cocoa Touch คุณก็สามารถสร้างและใช้งานmain.swiftได้
Sulthan

40

ในไฟล์ที่คุณสามารถดู AppDelegate.swift AppDelegate เป็นไฟล์รายการเริ่มต้น@UIApplicationMain

โดยทั่วไป: main.mและAppDelegate.mถูกรวมเข้าSwiftกับเพียงAppDelegate.swift


2
@nathan เขาแท็กiOS8นั่นไปเพื่อCocoa-Touchคำตอบของฉันถูกต้อง

ดีฉันสงสัยว่าฉันจะเปลี่ยน main.m ให้รวดเร็วได้อย่างไรและฉันไม่พบสิ่งเดียว
Jalil

28

คุณอาจต้องการอ่านไฟล์และการเริ่มต้น

ข้อยกเว้นคือไฟล์พิเศษชื่อ“ main.swift” ซึ่งทำงานคล้ายกับไฟล์สนามเด็กเล่น แต่สร้างขึ้นด้วยซอร์สโค้ดของแอปของคุณ ไฟล์“ main.swift” สามารถมีรหัสระดับบนสุดและกฎที่ขึ้นกับคำสั่งซื้อก็มีผลเช่นกัน มีผลบังคับใช้บรรทัดแรกของโค้ดที่จะทำงานใน“ main.swift” ถูกกำหนดโดยปริยายให้เป็นจุดเข้าใช้งานหลักของโปรแกรม ซึ่งจะทำให้โปรแกรม Swift ขั้นต่ำเป็นบรรทัดเดียวได้ตราบใดที่บรรทัดนั้นอยู่ใน“ main.swift”

ใน Xcode เทมเพลต Mac เริ่มต้นที่จะรวมไฟล์“ main.swift” แต่สำหรับแอป iOS ค่าเริ่มต้นสำหรับเทมเพลตโครงการ iOS ใหม่คือการเพิ่ม @UIApplicationMain ลงในไฟล์ Swift ปกติ ซึ่งทำให้คอมไพเลอร์สังเคราะห์จุดเริ่มต้นหลักสำหรับแอป iOS ของคุณและไม่จำเป็นต้องใช้ไฟล์“ main.swift”

หรือคุณสามารถเชื่อมโยงในการใช้งานหลักที่เขียนใน Objective-C โดยทั่วไปเมื่อย้ายโครงการจาก Objective-C ไปยัง Swift เพิ่มขึ้น


3
ฉันพบว่านี่เป็นวิธีที่ดีขึ้นและมีคำอธิบายระดับที่สูงขึ้นเกี่ยวกับวิธีตั้งค่าจุดเริ่มต้นใน iOS
Steven

คำตอบที่ดีและการเชื่อมโยงที่ดี จากนั้นฉันก็พบสถานที่ที่ดีในการวางโค้ดที่ต้องทำงาน "ก่อนกำหนด" แทนที่จะใช้หนึ่งในวิธีการมอบสิทธิ์ของแอปฉันเพียงแค่ลบล้าง init บนตัวแทนของแอปและทำที่นั่น ฉันใช้มันเช่นเพื่อตั้งค่าระดับการบันทึกเริ่มต้น
charles

1

ในแอพ Swift มีคุณสมบัติ:

  • @UIApplicationMain (โกโก้ทัช)
  • @NSApplicationMain (โกโก้)

ที่บอกคอมไพเลอร์ที่รวดเร็วว่าจุดเริ่มต้นของแอปพลิเคชันอยู่ที่ไหน

สิ่งที่คอมไพเลอร์ที่รวดเร็วทำภายใต้ประทุนคือมันสร้างไฟล์ mainฟังก์ชันซึ่งโดยพื้นฐานแล้วจะมีลักษณะเหมือนกับในแอป Objective-C และถือว่าวิธีนี้เป็นจุดเริ่มต้นของแอป (วิธีแรกที่เรียกเมื่อกระบวนการแอปพลิเคชันเริ่มต้นขึ้น)

หากคุณต้องการอ่านเพิ่มเติมเกี่ยวกับสิ่งที่คอมไพเลอร์ที่รวดเร็วทำกับMainแอตทริบิวต์ระบบปฏิบัติการรู้ได้อย่างไรว่าจุดเริ่มต้นของแอปพลิเคชันอยู่ที่ไหนฉันขอแนะนำให้คุณอ่านบทความนี้: ทำความเข้าใจเกี่ยวกับจุดเริ่มต้นของแอป iOS


1

ในสวิฟท์ 5.3 มีใหม่แอตทริบิวต์ซึ่งจะช่วยให้คุณสามารถควบคุมที่จุดเริ่มต้นของคุณอยู่ในโครงการของคุณมากกว่าแค่@main main.swiftมีรายการหลักได้เพียงรายการเดียวและคุณไม่มีmain.swiftไฟล์และแอตทริบิวต์@mainไม่ได้ ดูhttps://github.com/apple/swift-evolution/blob/master/proposals/0281-main-attribute.mdสำหรับรายละเอียดเพิ่มเติม

@main
struct App {
    static func main() {
        print("Starting.")
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.