Apa padanan Swift dengan Java toString()
untuk mencetak status instance kelas?
Apa padanan Swift dengan Java toString()
untuk mencetak status instance kelas?
Jawaban:
The description
properti adalah apa yang Anda cari. Ini adalah properti yang diakses saat Anda mencetak variabel yang berisi objek.
Anda dapat menambahkan description
ke kelas Anda sendiri dengan mengadopsi protokol CustomStringConvertible
dan kemudian mengimplementasikan description
properti.
class MyClass: CustomStringConvertible {
var val = 17
public var description: String { return "MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12
print(myobj) // "MyClass: 12"
description
juga digunakan saat Anda memanggil String
konstruktor:
let str = String(myobj) // str == "MyClass: 12"
Ini adalah metode yang direkomendasikan untuk mengakses deskripsi instance (kebalikan dari myobj.description
yang tidak akan berfungsi jika kelas tidak diimplementasikan CustomStringConvertible
)
String(obj)
?
.debugDescription
untuk versi yang lebih ramah programmer
Anda harus menggunakan String(obj)
.
Langsung dari dokumentasi untuk CustomStringConvertible :
CATATAN
String (instance) akan berfungsi untuk instance jenis apa pun, menampilkan deskripsinya jika instance tersebut adalah CustomStringConvertible. Oleh karena itu, menggunakan CustomStringConvertible sebagai batasan umum, atau mengakses deskripsi jenis yang sesuai secara langsung, tidak disarankan.
description()
metode CustomStringConvertible
akan cukup.
NSObject
kelas yang diperluasJika kelas model Anda diperpanjang dari NSObject
, Anda harus mengganti Variabel description
sebagai berikut:
public override var description: String {
return "\n{\n index: \(self.index),\n"
+ " country: \(self.name),\n"
+ " isoCountryCode: \(self.isoCountryCode),\n"
+ " localeId: \(self.localeId),\n"
+ " flagImageName: \(self.flagImageName!)\n}"
}
Anda dapat memeriksa bagaimana saya melakukannya di sini di dalam Country
kelas , di "Perpustakaan Swift iOS CountryPicker" .
Atau, untuk memudahkan Anda dalam memahaminya, class dan description
metode Anda akan terlihat seperti berikut:
public class MyClass: NSObject {
public var memberAttribute = "I'm an attribute"
public override var description: String {
return "My Class member: \(self.memberAttribute)"
}
}
Catatan:
Karena Anda memperluas kelas Modal Anda dari NSObject
itu, kelas Anda tidak perlu CustomStringConvertible
lagi mematuhi kelas, dan Anda description
mengganti variabel dari NSObject
kelas itu sendiri. Selalu ingat, CustomStringConvertible
sebagian besar adalah cara Swift murni untuk mencapai ini.