Apakah Swift setara dengan #warning? Ini hanya digunakan untuk menampilkan peringatan di GUI Xcode sendiri
Saya juga tertarik pada apakah ada yang setara dengan #error.
Apple mengatakan tanda #pragma akan segera hadir, mungkin bisa sama dengan ini.

Apakah Swift setara dengan #warning? Ini hanya digunakan untuk menampilkan peringatan di GUI Xcode sendiri
Saya juga tertarik pada apakah ada yang setara dengan #error.
Apple mengatakan tanda #pragma akan segera hadir, mungkin bisa sama dengan ini.

Jawaban:
Di masa depan, Apple devs mungkin akan merilis //WARNING: landmark, atau menyediakan fungsionalitas untuk landmark lain.
Untuk meningkatkan fungsi ini dengan Swift di Xcode hari ini, Anda dapat melakukan hal berikut seperti yang dijelaskan oleh Ben Dodson & Jeffrey Sambells:
Tambahkan Run Script baru ke tab fase pembuatan target Anda (pengaturan proyek> build fase> '+'> fase skrip jalankan baru), dan rekatkan kode berikut dalam kotak kosong:
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
Ini akan memaksa Xcode untuk menandai peringatan pada waktu kompilasi untuk setiap // TODO:atau // FIXME:komentar yang Anda markup.
Atau, Anda dapat mengubah TAG dengan tag khusus: TAGS="WARNING:"dalam kode di atas yang akan menjaga perilaku default untuk TODO & FIXME dan akan meningkatkan waktu kompilasi peringatan pada setiap komentar yang ditandai sebagai komentar // WARNING:.
http://bendodson.com/weblog/2014/10/02/showing-todo-as-warning-in-swift-xcode-project/ http://jeffreysambells.com/2013/01/31/generate-xcode- peringatan-dari-todo-komentar
EDIT: 18/11/14
@ david-h mengangkat poin yang baik dalam komentarnya. Jika Anda hanya ingin meningkatkan peringatan ini dalam konfigurasi bangunan tertentu, Anda dapat melakukan hal berikut:
if [ "${CONFIGURATION}" = "Debug" ]; then
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi
Atau, Anda bisa menggunakan "Rilis" daripada "Debug" untuk hanya menargetkan membangun produksi.
-type fopsi ke findperintah untuk mengecualikan direktori dari hasil pencarian. Ini seharusnya tidak menjadi masalah bagi kebanyakan orang, tetapi siapa pun yang menggunakan R.swiftpod akan mengalami kesalahan yang sama dengan yang saya miliki karena R.swiftmerupakan direktori
Edit
Pada Swift 4.2, dukungan tingkat bahasa tersedia untuk peringatan dan kesalahan bangun.
#warning("Warning description")
#error("Throws a build error")
Jawaban Asli
Cepat, kotor, dan oh begitu sederhana dan elegan sekaligus.
// Description of what you need to fix
var FIX_ME__🛠🛠🛠: AnyObject
Melemparkan peringatan bahwa 'FIX_ME__🛠🛠🛠' tidak pernah digunakan.
Anda dapat menambahkan emotikon ke nama variabel jika Anda suka ... Saya sering menggunakan 😱 dan 🛠, untuk sesuatu yang benar-benar perlu diperbaiki, saya bahkan mempertimbangkannya 💩. Anda dapat mengganti FIX_ME__dengan apa pun yang Anda inginkan: ALGORITHM_NEEDS_REVIEW, BugID_148, atauJOHNNY_YOU_BROKE_THIS adalah beberapa contoh.
Cepat, tanpa pengaturan, ringkas, dan emotikon bahkan dapat menambahkan humor / kepribadian pada kode Anda. Terkadang solusi yang paling sederhana adalah solusi terbaik.
let fixMeMakeMeNonOptional: Intmemberi Anda Immutable value fixMeMakeMeNonOptional was never used; consider replacing with _ or removing it di navigator masalah. Semua solusi lain memberi Anda lebih banyak pesan kesalahan umum.
Dimulai dengan Xcode 10 dan Swift 4.2 Anda sekarang dapat menggunakan #warninglagi seperti:
#warning("TODO: Clean up this code after testing")
Ini akan muncul sebagai peringatan di Xcode seperti yang diharapkan!
Ini berfungsi bahkan dalam kombinasi dengan #ifcek, misalnya yang berikut ini hanya akan menampilkan peringatan jika platform target Anda adalah iOS:
#if os(iOS)
#warning("this code is untested in iOS")
#endif
Ada juga #errorjika Anda ingin bangunan Anda gagal.
Di Swift menggunakan XCode 6 Anda dapat menggunakan berbagai jenis landmark untuk tujuan yang berbeda. Inilah yang dikatakan Apple tentang hal itu:
Xcode sekarang mendukung // MARK :, // TODO: dan // FIXME: landmark untuk membubuhi keterangan kode Anda dan mencantumkannya di bilah lompat.
Jadi untuk mengatur peringatan dengan deskripsi, Anda akan menggunakan sesuatu seperti ini:
//TODO: Clean up this code after testing
Jika Anda hanya ingin menetapkan tanda pendek (dengan asumsi Anda akan ingat apa yang harus dilakukan), gunakan ini:
//FIXME
EDIT: Namun landmark ini hanya muncul di bar lompat XCode yang mungkin bukan yang Anda inginkan dan apa yang diharapkan - terutama dari tanda // TODO: dan // FIXME. Saya telah mengajukan radar tentang itu: # 17776817. Semoga Apple akan menambahkan ini di build mendatang di XCode 6.
SOLUSI (EDIT 2):
Jika Anda menginstal Swift Linter via Homebrew (jalankan brew install swiftlintsetelah a brew update) dan menambahkan skrip build yang disarankan ke proyek Anda, maka Anda akan melihat semua landmark Anda TODOdan FIXMEmuncul sebagai peringatan dalam Xcode. SwiftLint bahkan akan menambahkan lebih banyak peringatan / kesalahan yang dapat Anda konfigurasi agar sesuai dengan kebutuhan Anda - saya hanya dapat merekomendasikan menggunakan SwiftLint dan itu memecahkan masalah ini dengan cara yang hebat!
Masih belum ditambahkan oleh tim Apple. Apa yang saya putuskan untuk lakukan mungkin curang, tetapi setidaknya itu menunjukkan kepada saya pesan FIXME. Jadi yang saya lakukan adalah mendeklarasikan fungsi FIXME () dalam file Swift:
@availability(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
func FIXME()
{
}
dan ketika saya memanggilnya dari fungsi lain itu tidak menunjukkan peringatan, misalnya
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
FIXME() // Incomplete method implementation.
return 0
}

Untuk penggunaan Swift 2
@available(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
Lihatlah artikel ini .
Anda dapat menulis skrip Anda sendiri yang akan menyorot semua tag.
TAGS="TODO:|FIXME:"
ERRORTAG="ERROR:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$|($ERRORTAG).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" | perl -p -e "s/($ERRORTAG)/ error: \$1/"
egrep --directories='skip'untuk mengabaikan direktori dengan nama-nama seperti Device.swift
Sebagai alternatif, jika Anda ingin sesuatu muncul di panel peringatan, Anda dapat menulis sesuatu seperti:
if (false){
var x = 2;
}
Anda tidak dapat menampilkan teks apa pun, tetapi setidaknya itu adalah penanda yang lebih terlihat, terutama jika Anda cenderung memperlakukan (kebanyakan) peringatan seperti kesalahan.
Saya mengusulkan dan mengimplementasikan fitur ini, dan fitur ini akan dikirimkan bersama Swift 4.2. Anda dapat menggunakannya sekarang dengan mengunduh mastertoolchain di swift.org .
#if os(macOS)
#error("macOS is not supported")
#endif
#warning("finish this")
Satu CocoaPod yang saya gunakan ada .swiftdi namanya, jadi direktori dikembalikan, yang menyebabkan script oleh Kyle mogok. Menambahkan -type fke findperintah memperbaiki masalah itu dengan hanya melihat file yang cocok*.swift bukan juga kembali direktori yang cocok dengan pola.
Kode terakhir yang saya gunakan:
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -type f -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
Jika Anda enggan untuk menyesuaikan pengaturan bangunan Anda, obat rumah sederhana lainnya adalah menempelkan placeholder editor di depan komentar:
<#todo#>// stop and fixme!
Anda mendapatkan kesalahan "Editor placeholder dalam file sumber" saat membuat, tetapi tidak seperti solusi Jordan, tidak ada kesalahan langsung yang mengganggu Anda saat mengetik:
Setelah banyak pencarian dan kerinduan, saya yakin tidak ada entitas seperti itu. Saya masih berharap dengan catatan rilis Xcode terbaru yang menyebutkan masih kurangnya mekanisme tanda #pragma, #warning dan #error juga akan datang.
Selain itu, saya sangat merekomendasikan pengarsipan Radar dengan Apple di bugreport.apple.com untuk menambahkan fungsi ini (Anda dapat menipu 17702491).
Kami menulis alat yang dapat dikonfigurasi yang memungkinkan Anda menaruh peringatan dan kesalahan di Xcode Issue Navigator berdasarkan tag komentar dan membangun konfigurasi: https://github.com/doubleencore/XcodeIssueGenerator
Pasang itu:
brew tap doubleencore/tap
brew install xcodeissuegenerator
Kemudian masukkan baris dalam Fase Pembuatan Skrip Run:
# Mark WARNINGs, SERIOUSs, and TODOs as warnings in DEBUG builds excluding the Vendor and Third Party directories.
XcodeIssueGenerator -b DEBUG -w "WARNING, SERIOUS, TODO" -x "Vendor/, Third Party/"
Inilah artikel yang menjelaskan bagaimana kami menggunakannya.
Saya mungkin terlambat ke pesta dengan Xcode 10 mendukung kesalahan dan peringatan, tetapi hanya meletakkan String:
"Need to finish implementing this"
akan menghasilkan peringatan: String literal is unuseddengan pelengkapan otomatis masih berfungsi dan proyek masih dikompilasi.
Jawaban saya tidak cukup memuaskan pertanyaan Anda, tetapi jika Anda ingin sesuatu yang mudah Anda dapat menggunakan ini plugin alcatraz yang bekerja di semua proyek tanpa persiapan tambahan. Lakukan saja yang berikut ini:
1) install Alcatraz (Nice package manager for Xcode Plug-ins) by entering this line in terminal:
curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/install.sh | sh
2) Then restart Xcode and on it launch agree to install all bundles not included in Xcode
3) In Xcode select menu item -> Window -> Package manager -> type in search panel XTodo and press install
4) Relaunch Xcode and again agree to install additional bundles
5) From now press Ctrl + T and you will see all Tags in nice window
Itu juga memiliki preferensi untuk menambahkan tag baru
Keuntungan potongan ini - tidak menunjukkan peringatan dari Pods:
if [ "${CONFIGURATION}" = "DEBUG" ]; then
TAGS="TODO:|FIXME:|WARNING:|warning:" find "." \( -name "*.swift" \) -not -path "./Pods/*" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi
Bagaimana cara meng-install:
//WARNINGseperti #pragma akan//MARKtetapi saat ini keduanya tidak ditambahkan ke XCode beta.