ใน Objective C ฉันสามารถใช้#pragma mark
เพื่อทำเครื่องหมายส่วนของรหัสของฉันในเนวิเกเตอร์สัญลักษณ์ เนื่องจากนี่เป็นคำสั่งตัวประมวลผลล่วงหน้า C จึงไม่สามารถใช้ได้ใน Swift มีการยืนหยัดในเรื่องนี้ใน Swift หรือฉันต้องใช้ความคิดเห็นที่น่าเกลียด?
ใน Objective C ฉันสามารถใช้#pragma mark
เพื่อทำเครื่องหมายส่วนของรหัสของฉันในเนวิเกเตอร์สัญลักษณ์ เนื่องจากนี่เป็นคำสั่งตัวประมวลผลล่วงหน้า C จึงไม่สามารถใช้ได้ใน Swift มีการยืนหยัดในเรื่องนี้ใน Swift หรือฉันต้องใช้ความคิดเห็นที่น่าเกลียด?
คำตอบ:
คุณสามารถใช้ได้ // MARK:
มีการถกเถียงกันอยู่ว่าการใช้ส่วนขยายคลาสอย่างเสรีอาจเป็นการฝึกฝนที่ดีกว่าอยู่ดี เนื่องจากส่วนขยายสามารถใช้โปรโตคอลได้เช่นคุณสามารถวางวิธีการมอบหมายมุมมองตารางทั้งหมดในส่วนขยายและจัดกลุ่มรหัสของคุณในระดับความหมายมากกว่าที่#pragma mark
สามารถทำได้
// MARK:
, // TODO:
และ// FIXME
ในแหล่งที่มาของสวิฟท์และรายการพวกเขาในแถบกระโดด (BTW มันได้ทำในแหล่งที่มา (Obj) C - #pragma mark
ไม่ใช่วิธีเดียว) และใช่คุณยังสามารถเพิ่มตัวคั่น-
ของคุณMARK
ในเมนู
MARK
งานได้ในตอนนี้การใช้ส่วนขยายเพื่อจัดกลุ่มโค้ดที่เกี่ยวข้องกับความหมายบางประเภท (โดยเฉพาะการใช้โปรโตคอล) ยังคงมีประโยชน์ IMHO จะอ่านดีกว่ามากเพื่อให้การประกาศของคุณสอดคล้องกับโพรโทคอลถัดจากวิธีการที่ใช้มันไม่ใช่การประกาศโปรโตคอล 5 รายการที่ด้านบนของไฟล์
#pragma mark
เช่นเดียวกับ // MARK: -
เป็นเพียงตัวแยก// MARK: - stuff
ให้ตัวแยกและส่วนหัว// MARK: - stuff -
แก่คุณและให้ตัวคั่นส่วนหัวและตัวคั่นอื่นทั้งหมดในบรรทัดความคิดเห็นเดียว
มากถึง Xcode 5 คำสั่งของตัวประมวลผลล่วงหน้า#pragma mark
มีอยู่
จาก Xcode 6 คุณต้องใช้ // MARK:
คุณลักษณะตัวประมวลผลล่วงหน้าเหล่านี้อนุญาตให้นำโครงสร้างบางอย่างไปยังกล่องฟังก์ชันหล่นลงของตัวแก้ไขซอร์สโค้ด
ตัวอย่างบางส่วน:
// MARK:
-> จะถูกนำหน้าด้วยตัวแบ่งแนวนอน
// MARK: your text goes here
-> วาง 'ข้อความของคุณที่นี่' เป็นตัวหนาในรายการแบบหล่นลง
// MARK: - your text goes here
-> วาง 'ข้อความของคุณที่นี่' เป็นตัวหนาในรายการแบบหล่นลงนำหน้าด้วยตัวแบ่งแนวนอน
อัปเดต: เพิ่มภาพหน้าจอ 'ทำให้บางคนยังดูเหมือนมีปัญหากับสิ่งนี้:
// MARK: - text
สำหรับฉันหล่นลงรายการการแสดงและข้อความ: MARKแทนเพียงข้อความ
สำหรับผู้ที่มีความสนใจในการใช้ส่วนขยายกับเครื่องหมาย pragma (ดังที่กล่าวไว้ในความคิดเห็นแรก) นี่คือวิธีการใช้จาก Swift Engineer:
import UIKit
class SwiftTableViewController: UITableViewController {
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension SwiftTableViewController {
override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
return 1
}
override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
return 5
}
override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
let cell = tableView?.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell;
cell.textLabel.text = "Hello World"
return cell
}
}
มันไม่จำเป็นต้องเป็นแนวปฏิบัติที่ดีที่สุดด้วย แต่นี่คือวิธีที่คุณทำหากคุณต้องการ
typealias
คุณสามารถใช้ typealias DataSource = SwiftTableViewController
เช่น จากนั้นextension Datasource {}
UITableViewController
ไม่ใช่โปรโตคอล แต่เป็นคลาส คุณอาจหมายถึงUITableViewControllerDataSource
แต่นี่ไม่ใช่รูปแบบที่ใช้ในตัวอย่าง
extension
ส่วนหัวที่มีโปรโตคอลเช่นextension SwiftTableViewController : UITableViewController
มันจะอ่านง่ายขึ้นเพื่อดูว่าทำไมคุณเพิ่มส่วนขยายนั้นในชั้นเรียน
extension SwiftTableViewController : UITableViewDelegate { .. }
และextension SwiftTableViewController : UITableViewDatasource { .. }
Pragma mark - [SOME TEXT HERE]
ถูกใช้ในObjective-C เพื่อจัดกลุ่มฟังก์ชั่นหลาย ๆ อย่างด้วยกันโดยการแยกบรรทัด
ในSwiftคุณสามารถใช้สิ่งนี้ได้MARK, TODO OR FIXME
ผม. เครื่องหมาย: //MARK: viewDidLoad
สิ่งนี้จะสร้างเส้นแนวนอนพร้อมฟังก์ชั่นที่จัดกลุ่มภายใต้ viewDidLoad (แสดงในภาพหน้าจอ 1)
ii ทำ : //TODO: - viewDidLoad
ฟังก์ชันนี้จะจัดกลุ่มภายใต้สิ่งที่ต้องทำ: -หมวดหมู่viewDidLoad (แสดงในภาพหน้าจอ 2)
สาม. ช่วยแก้ไขข้อบกพร่องฉันหน่อย : //FIXME - viewDidLoad
ฟังก์ชันนี้จะจัดกลุ่มภายใต้FIXME: -หมวดหมู่viewDidLoad (แสดงในภาพหน้าจอ 3)
ตรวจสอบเอกสารประกอบของ Appleนี้เพื่อดูรายละเอียด
เอกสารอย่างเป็นทางการของ Apple เกี่ยวกับ Xcode Jump Bar: เพิ่มคำอธิบายประกอบโค้ดลงในแถบกระโดด
!!!:
และ???:
บางครั้งไม่สามารถแสดงได้
ในรหัส Objective-C Xcode ตรวจพบความเห็นชอบซึ่งเป็นบิตแบบพกพามากกว่า// MARK: - foo
#pragma
แต่ดูเหมือนว่าสิ่งเหล่านี้จะไม่ถูกหยิบมาใช้ด้วย (ยัง?)
แก้ไข: แก้ไขใน Xcode 6 เบต้า 4
// MARK: -
ได้ว่าไม่ได้ทำงานในขณะนี้
// MARK:
ดูเหมือนจะไม่ทำงาน ฉันได้ลองด้วย & โดยไม่เว้นวรรคทั้งที่มีและไม่มีโคลอนตัวพิมพ์ใหญ่และผสม (Mark) มีเคล็ดลับหรือไม่? ฉันต้องเปิดใช้งาน pref หรืออะไรสักอย่าง?
ผมคิดว่าเป็นวิธีที่ดีกว่าแทนExtensions
#pragma mark
รหัสก่อนใช้Extensions
:
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
...
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
...
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
...
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
...
}
}
รหัสหลังจากใช้Extensions
:
class ViewController: UIViewController {
...
}
extension ViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
...
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
...
}
}
extension ViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
...
}
}
extension
อย่างเดียวไม่โดดเด่นในเมนูแบบเลื่อนลงของตัวควบคุม breadcrumb ของ Xcode
// ARK:
ให้ฉันเห็นใน Xcode 8
!!!
และ???
ไวยากรณ์ไม่ปรากฏที่จะทำงานใน Xcode 8.3.3 ...
ยืนยันกับวิศวกรของ Apple ในห้องปฏิบัติการ Swift ที่ WWDC ในตอนนี้ว่าไม่มี #pragma หรือเทียบเท่าในขณะนี้พวกเขาพิจารณาข้อผิดพลาดนี้และมันจะมาถึงในไม่ช้าดังนั้นฉันจึงคาดเดาเบต้า 2 ฉันหวังว่า
อย่างไรก็ตามมันเป็นไปในทาง
ตอนนี้ Xcode สนับสนุน // MARK:, // สิ่งที่ต้องทำ: และ // สถานที่สำคัญ FIXME เพื่อใส่คำอธิบายประกอบรหัสของคุณและแสดงไว้ในแถบกระโดด
มีสามตัวเลือกในการเพิ่ม#pragma_mark
ใน Swift:
1) // MARK: - your text here -
2) // TODO: - your text here -
3) // FIXME: - your text here -
หมายเหตุ: ใช้ -
สำหรับเพิ่มตัวคั่น
ใช้
// MARK: SectionName
หรือ
// MARK: - SectionName
สิ่งนี้จะให้บรรทัดเหนือเครื่องหมาย pragma ทำให้อ่านง่ายขึ้น
เพื่อความสะดวกเพียงเพิ่ม
// MARK: - <#label#>
ไปยังตัวอย่างโค้ดของคุณ
ทางเลือก -
ใช้วิธีนี้
private typealias SectionName = ViewController
private extension SectionName {
// Your methods
}
สิ่งนี้จะไม่เพียงเพิ่มเครื่องหมาย (เหมือนเครื่องหมาย pragma) แต่ยังแยกรหัสอย่างชัดเจน
//MARK
รูปแบบ (ไม่มีช่องว่าง) และแนะนำ// MARK: (text)
( ช่องว่างระหว่าง//
และเครื่องหมายไม่มีช่องว่างระหว่างMARK
และ:
และช่องว่างระหว่าง:
และชื่อช่องว่าง )
//# MARK: - Spinner Class Methods
เพิ่มบรรทัดระหว่างโคลอนและคำอธิบายของคุณเพื่อแทรกบรรทัดคั่น สิ่งนี้ช่วยในการจัดระเบียบโค้ดของคุณมากยิ่งขึ้น รหัสและภาพหน้าจอด้านบนใช้ประโยชน์จากความคิดเห็นของมาร์คที่มีบรรทัดรวมอยู่ด้วย
ใช้งานได้กับความคิดเห็นของ MARK เท่านั้น
คุณอาจสนใจคำสั่งคอมไพเลอร์Swift 4.2 / XCode 10เช่น
#warning("Some string to display")
และ
#error("Some error to display")
มันอาจมีประโยชน์เมื่อคุณไม่ต้องการพลาดบางสิ่ง
โปรแกรมเมอร์มืออาชีพจะต้องใช้แท็กนี้เพื่อรหัสที่ดี นอกจากนี้ยังเป็นสิ่งที่ดีสำหรับการทำงานเป็นทีม
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
มันง่ายที่จะหาวิธีการเช่นนี้
ใน Xcode 11 พวกเขาเพิ่มแผนที่ย่อที่สามารถเปิดใช้งานEditor -> Minimap
ได้
แผนที่ย่อจะแสดงข้อความแต่ละข้อความสำหรับการวางแนวอย่างรวดเร็วในรหัส เครื่องหมายแต่ละอันเขียนเหมือนกัน// MARK: Variables
//MARK:
ดูเหมือนจะไม่ทำงานสำหรับฉันใน Xcode 6.3.2 อย่างไรก็ตามนี่คือสิ่งที่ฉันทำเพื่อให้มันใช้ได้ :
1) รหัส:
import Cocoa
class MainWindowController: NSWindowController {
//MARK: - My cool methods
func fly() {
}
func turnInvisible() {
}
}
2) jump bar
ไม่มีอะไรเปลี่ยนแปลงเมื่อเพิ่ม//MARK
: ความคิดเห็น อย่างไรก็ตามหากฉันคลิกที่ชื่อที่ถูกต้องที่สุดในแถบกระโดดในกรณีของฉันมันจะบอกว่าMainWindowController(with a leading C icon)
หน้าต่างป๊อปอัพจะแสดงผลของ // MARK: ความคิดเห็นซึ่งเป็นหัวเรื่องที่ระบุว่า "วิธีเด็ด ๆ ของฉัน":
3) ฉันยังสังเกตเห็นว่าถ้าฉันคลิกที่หนึ่งในวิธีการในรหัสของฉันแล้ววิธีการจะกลายเป็นรายการที่ถูกที่สุดในแถบกระโดด เพื่อที่จะได้MainWindowController(with a leading C icon)
เป็นรายการที่ถูกที่สุดในแถบกระโดดฉันต้องคลิกที่ช่องว่างด้านบนวิธีการของฉัน
แอปเปิ้ลระบุในรุ่นล่าสุดของอาคารโกโก้ปพลิเคชัน ,
คอมไพเลอร์ Swift ไม่มีตัวประมวลผลล่วงหน้า แต่จะใช้ประโยชน์จากคุณลักษณะเวลาคอมไพล์สร้างการกำหนดค่าและคุณสมบัติภาษาเพื่อทำหน้าที่การทำงานเดียวกัน ด้วยเหตุผลนี้คำสั่ง preprocessor จะไม่ถูกนำเข้าใน Swift
อักขระ # ยังคงเป็นวิธีที่คุณทำงานกับการกำหนดค่าการสร้างต่าง ๆ และสิ่งต่าง ๆ เช่นนั้น แต่ดูเหมือนว่าพวกเขากำลังพยายามลดความต้องการของคุณสำหรับการประมวลผลล่วงหน้าส่วนใหญ่ในหลอดเลือดของ pragma และส่งต่อคุณไปยังคุณสมบัติภาษาอื่น ๆ ทั้งหมด บางทีนี่อาจช่วยในการทำงานของ Playgrounds และ REPL ที่ทำงานใกล้เคียงกับโค้ดที่ถูกคอมไพล์อย่างสมบูรณ์ที่สุด
เพิ่มไอเท็มสิ่งที่ต้องทำ: แทรกความคิดเห็นด้วยคำนำหน้าสิ่งที่ต้องทำ: ตัวอย่างเช่น: // TODO: [ไอเท็มสิ่งที่ต้องทำของคุณ]
เพิ่มตัวเตือนการแก้ไขข้อบกพร่อง: ใส่ความคิดเห็นด้วยคำนำหน้า FIXME: ตัวอย่างเช่น: // FIXME: [การแจ้งเตือนการแก้ไขข้อบกพร่องของคุณ]
เพิ่มหัวข้อ: ใส่ความคิดเห็นด้วยคำนำหน้าเครื่องหมาย: ตัวอย่างเช่น: // MARK: [ส่วนหัวของคุณ]
เพิ่มบรรทัดตัวคั่น: หากต้องการเพิ่มตัวคั่นด้านบนของคำอธิบายประกอบให้เพิ่มยัติภังค์ (-) หน้าส่วนความคิดเห็นของคำอธิบายประกอบ ตัวอย่างเช่น: // MARK: - [เนื้อหาของคุณ] หากต้องการเพิ่มตัวคั่นใต้คำอธิบายประกอบให้เพิ่มยัติภังค์ (-) หลังส่วนความคิดเห็นของคำอธิบายประกอบ ตัวอย่างเช่น: // MARK: [เนื้อหาของคุณ] -
ลองสิ่งนี้:
// MARK: Reload TableView
func reloadTableView(){
tableView.reload()
}
เครื่องหมาย Pragma เป็นวิธีปรับปรุงความสามารถในการอ่านรหัสของคุณ ความคิดเห็น pragma จะปรากฏขึ้นเช่นแท็กบน Xcode jumpbar
//MARK: <Your comment goes here>
ตัวอย่าง: ในรหัส
//MARK: Properties
// MARK: View Life cycle
//MARK: Helper methods
นี่คือลักษณะที่จะปรากฏในแถบกระโดด Xcode