Pertanyaan Tanda #pragma di Swift?


Di Objective C, saya bisa menggunakan #pragma mark untuk menandai bagian dari kode saya di navigator simbol. Karena ini adalah perintah preprocessor C, ini tidak tersedia di Swift. Apakah ada penyangga untuk ini di Swift, atau apakah saya harus menggunakan komentar jelek?


799
2018-06-03 14:05


asal


Jawaban:


Kamu dapat memakai // MARK:


Historis, Sebelum Xcode 6 Beta 4

Baru saja berbicara dengan seorang Insinyur di sini di WWDC, dan versi beta Xcode saat ini tidak mengimplementasikan

// MARK: 

gaya belum, tapi aku diberitahu versi masa depan akan.

Itu juga menyarankan bahwa membuat penggunaan liberal dari ekstensi kelas mungkin menjadi praktik yang lebih baik pula. Karena ekstensi dapat menerapkan protokol, Anda dapat mis. menempatkan semua metode delegasi tampilan tabel Anda dalam ekstensi dan mengelompokkan kode Anda pada tingkat yang lebih semantik dari #pragma mark mampu.


1002
2018-06-04 12:46



Bagi mereka yang tertarik menggunakan ekstensi vs tanda pragma (sebagaimana disebutkan dalam komentar pertama), berikut ini cara menerapkannya dari Insinyur Swift:

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
    }

}

Ini juga belum tentu praktik terbaik, tetapi ini adalah bagaimana Anda melakukannya jika Anda suka.


156
2018-06-05 20:00



Hingga Xcode 5 direktif preprocessor #pragma mark ada.

Mulai dari Xcode 6, Anda harus menggunakannya // MARK:

Fitur preprocessor ini memungkinkan untuk membawa beberapa struktur ke kotak drop down fungsi dari editor kode sumber.

beberapa contoh :

// MARK:

-> akan didahului oleh pembatas horizontal

// MARK: your text goes here

-> letakkan 'teks Anda di sini' dalam huruf tebal di daftar tarik-turun

// MARK: - your text goes here

-> menempatkan 'teks Anda diletakkan di sini' dalam huruf tebal di daftar tarik turun, didahului oleh pembatas horizontal

pembaruan: menambahkan tangkapan layar 'karena beberapa orang tampaknya masih mengalami masalah dengan ini:

enter image description here


152
2017-10-16 15:49



Pragma mark - [SOME TEXT HERE] digunakan di Objective-C to group beberapa fungsi bersama dengan garis yang memisahkan.

Di Cepat Anda dapat mencapai ini menggunakan MARK, TODO OR FIXME

saya. MARK:  //MARK: viewDidLoad 

Ini akan membuat garis horisontal dengan fungsi-fungsi yang dikelompokkan dalam viewDidLoad (ditunjukkan pada screenshot 1)

Screenshot 1

ii. MELAKUKAN :  //TODO: - viewDidLoad

Ini akan mengelompokkan fungsi di bawah TODO: - viewDidLoad kategori (ditampilkan dalam screenshot 2)

Screenshot 2

aku aku aku. PERBAIKI AKU :  //FIXME - viewDidLoad 

Ini akan mengelompokkan fungsi di bawah FIXME: - viewDidLoad kategori (ditampilkan dalam screenshot 3)

Screenshot 3


100
2017-10-09 13:52



Dalam Objective-C kode Xcode mendeteksi komentar seperti // MARK: - foo yang sedikit lebih portabel daripada #pragma. Tetapi ini tampaknya tidak diambil juga (belum?).

Sunting: Diperbaiki dalam Xcode 6 beta 4.


53
2018-06-03 14:12



kupikir Extensions adalah cara yang lebih baik daripada #pragma mark.

Kode sebelum menggunakan 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) {
        ...
    }
}

Kode setelah menggunakan 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) {
       ...
    }
}

35
2018-06-30 09:05



Dikonfirmasi dengan Insinyur Apple di lab Swift pagi ini di WWDC bahwa saat ini tidak ada #pragma atau yang setara saat ini, mereka menganggap ini bug, dan itu akan segera tiba, jadi saya menebak beta 2, saya harap.

Pokoknya, ada di jalan itu.


Xcode sekarang mendukung // MARK :, // TODO: dan / / FIXME landmarks untuk menganotasi kode Anda dan daftar mereka di jump bar


31
2018-06-06 21:58



Xcode 8 sekarang menanganinya sebagai diikuti dan muncul seperti ini di dropdown metode:

enter image description here


30
2018-06-17 00:25