Apa perbedaan antara print
, NSLog
dan println
dan ketika saya harus menggunakan masing-masing?
Sebagai contoh, dengan Python jika saya ingin mencetak kamus, saya baru saja print myDict
, tetapi sekarang saya memiliki 2 pilihan lain. Bagaimana dan kapan saya harus menggunakan masing-masing?
os_log
. Silakan lihat jawaban saya di bawah ini .os_log
: coba lihat dokumentasi lengkap halaman tujuan-C. Jauh lebih lengkap .Jawaban:
Beberapa perbedaan:
print
vsprintln
:The
print
fungsi cetak pesan di konsol Xcode saat debugging aplikasi.Ini
println
adalah variasi dari ini yang telah dihapus di Swift 2 dan tidak digunakan lagi. Jika Anda melihat kode lama yang digunakanprintln
, kini Anda dapat menggantinya dengan amanprint
.Kembali di Swift 1.x,
print
tidak menambahkan karakter baris baru di akhir string yang dicetak, sedangkanprintln
itu. Tetapi saat ini,print
selalu tambahkan karakter baris baru di akhir string, dan jika Anda tidak ingin melakukannya, berikanterminator
parameter""
.NSLog
:NSLog
lebih lambat;NSLog
menambahkan cap waktu dan pengidentifikasi ke output, sedangkanprint
tidak akan;NSLog
pernyataan muncul di konsol perangkat dan konsol debugger sedangkanprint
hanya muncul di konsol debugger.NSLog
menggunakanprintf
string format -style, misyang akan menghasilkan:
IOS 10 / macOS 10.12 yang efektif, ada alternatif ketiga
os_log
, bagian dari sistem "pencatatan terpadu" (lihat video WWDC 2016 Pencatatan Terpadu dan Pelacakan Aktivitas ).Anda harus mengimpor
os.log
sebelum menggunakanos_log
fungsi:Seperti
NSLog
,os_log
akan menampilkan pesan ke konsol debugging Xcode dan konsol perangkat jugaAnda sekarang dapat mengontrol bidang "subsistem" dan "kategori" yang tersedia di aplikasi Konsol. Sebagai contoh:
Saat Anda mengamati aplikasi melalui aplikasi Konsol eksternal, Anda tidak hanya dapat menambahkan kolom ini ke tampilan utama, tetapi Anda dapat memfilter berdasarkan ini. Ini sangat berguna ketika ingin membedakan pesan debug Anda dari (a) yang dihasilkan oleh subsistem lain atas nama aplikasi Anda; atau (b) pesan dari kategori atau tipe lain.
Anda dapat menentukan jenis penebangan pesan, baik
.info
,.debug
,.error
,.fault
(atau.default
):Jadi, jika menggunakan aplikasi Konsol eksternal, Anda dapat memilih untuk hanya melihat pesan dari kategori tertentu (mis. Hanya menampilkan pesan debug jika Anda memilih "Sertakan Pesan Debug" pada menu "Aksi" Konsol). Pengaturan ini juga menentukan banyak detail masalah yang halus tentang apakah sesuatu masuk ke disk atau tidak. Lihat video WWDC untuk lebih jelasnya.
Anda tidak dapat menggunakan interpolasi string saat menggunakan
os_log
. Misalnya, Anda tidak dapat melakukan:Anda harus melakukan:
Salah satu alasan untuk pembatasan di atas adalah untuk mendukung privasi data. Tipe data primitif (mis. Angka) bersifat publik secara default dan objek (mis. String) bersifat pribadi secara default. Pada contoh sebelumnya di mana Anda login URL, jika aplikasi itu dipanggil dari perangkat itu sendiri dan Anda menonton dari aplikasi Konsol Mac Anda, Anda akan melihat:
Jika Anda ingin melihatnya dari perangkat eksternal, Anda harus melakukannya:
Catatan,
NSLog
sekarang menggunakan sistem notifikasi terpadu di belakang layar, tetapi dengan peringatan berikut:Anda tidak dapat mengontrol subsistem atau kategori atau tipe log;
Itu tidak mendukung pengaturan privasi.
Intinya,
print
cukup untuk tugas-tugas sederhana, tetapiNSLog
berguna karena termasuk informasi timestamp untuk Anda.Kekuatan
os_log
lega jelas ketika men-debug aplikasi iOS yang harus diuji di luar Xcode. Misalnya, saat menguji latar belakang proses aplikasi iOS seperti pengambilan latar belakang, terhubung ke debugger Xcode mengubah siklus hidup aplikasi . Jadi, Anda sering ingin menguji pada perangkat fisik, menjalankan aplikasi dari perangkat itu sendiri, bukan memulai aplikasi dari debugger Xcode. Pencatatan terpadu memungkinkan Anda masih menontonos_log
pernyataan perangkat iOS Anda dari aplikasi Konsol macOS.sumber
print
, itu muncul di area debug Xcode, sama sepertidebugPrint
. Satu-satunya perbedaan adalah bahwaprint
akhirnya memanggildescription
metode objek, dandebugPrint
panggilandebugDescription
, yang mungkin lebih bertele-tele daripadadescription
.Jika Anda menggunakan Swift 2 , sekarang Anda hanya dapat menggunakan print () untuk menulis sesuatu ke output.
Diperbarui ke iOS 9
Secara default, fungsi mengakhiri garis yang dicetak dengan menambahkan garis putus.
Terminator
Untuk mencetak nilai tanpa putus garis setelahnya, berikan string kosong sebagai terminator
Pemisah
Anda sekarang dapat menggunakan pemisah untuk menggabungkan beberapa item
Kedua
Atau Anda bisa menggabungkan menggunakan cara ini
sumber
appendNewline
memiliki nilai defaulttrue
terminator : ""
, misalnyaprint("...", terminator: "")
Selain itu, Swift 2 memiliki
debugPrint()
(danCustomDebugStringConvertible
protokol)!Jangan lupa
debugPrint()
yang berfungsi seperti apaprint()
tetapi paling cocok untuk debugging .Contoh:
print("Hello World!")
menjadiHello World
debugPrint("Hello World!")
menjadi"Hello World"
(Kutipan!)print(1..<6)
menjadi1..<6
debugPrint(1..<6)
menjadiRange(1..<6)
Setiap kelas dapat menyesuaikan representasi string debug mereka melalui
CustomDebugStringConvertible
protokol.sumber
DebugPrintable
protokol telah diubah namanya menjadiCustomDebugStringConvertible
protokol .description
adalah untukdebugDescription
sebagai Pythonstr
adalah untukrepr
?Untuk menambah jawaban Rob, sejak iOS 10.0, Apple telah memperkenalkan sistem "Unified Logging" yang sama sekali baru yang menggantikan sistem logging yang ada (termasuk ASL dan Syslog, NSLog), dan juga melampaui pendekatan logging yang ada dalam kinerja, berkat teknik baru termasuk kompresi data log dan pengumpulan data yang ditangguhkan.
Dari Apple :
Apple sangat menyarankan
os_log
untuk maju untuk mencatat semua jenis pesan, termasuk info, debug, pesan kesalahan karena kinerjanya yang jauh lebih baik dibandingkan dengan sistem pencatatan sebelumnya, dan pengumpulan datanya yang terpusat memungkinkan pencatatan log dan aktivitas yang mudah bagi pengembang. Faktanya, sistem baru ini kemungkinan sangat rendah jejaknya sehingga tidak akan menyebabkan "efek pengamat" ketika bug Anda menghilang jika Anda memasukkan perintah logging, mengganggu waktu terjadinya bug.Anda dapat mempelajari lebih lanjut tentang ini di sini .
Singkatnya: gunakan
print()
untuk debugging pribadi Anda untuk kenyamanan (tetapi pesan tidak akan dicatat ketika digunakan pada perangkat pengguna). Kemudian, gunakan Pencatatan Bersatu (os_log
) sebanyak mungkin untuk yang lainnya.sumber
Ada metode lain yang disebut
dump()
yang juga dapat digunakan untuk login:Dari Fungsi Perpustakaan Standar Swift
sumber