The descriptionproperti adalah apa yang Anda cari. Ini adalah properti yang diakses saat Anda mencetak variabel yang berisi objek.
Anda dapat menambahkan descriptionke kelas Anda sendiri dengan mengadopsi protokol CustomStringConvertibledan kemudian mengimplementasikan descriptionproperti.
classMyClass: CustomStringConvertible{
var val = 17publicvar description: String { return"MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12print(myobj) // "MyClass: 12"
descriptionjuga digunakan saat Anda memanggil Stringkonstruktor:
let str = String(myobj) // str == "MyClass: 12"
Ini adalah metode yang direkomendasikan untuk mengakses deskripsi instance (kebalikan dari myobj.descriptionyang tidak akan berfungsi jika kelas tidak diimplementasikan CustomStringConvertible)
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.
Atau, untuk memudahkan Anda dalam memahaminya, class dan descriptionmetode Anda akan terlihat seperti berikut:
publicclassMyClass: NSObject{
publicvar memberAttribute = "I'm an attribute"publicoverridevar description: String {
return"My Class member: \(self.memberAttribute)"
}
}
Catatan:
Karena Anda memperluas kelas Modal Anda dari NSObjectitu, kelas Anda tidak perlu CustomStringConvertiblelagi mematuhi kelas, dan Anda descriptionmengganti variabel dari NSObjectkelas itu sendiri. Selalu ingat, CustomStringConvertiblesebagian besar adalah cara Swift murni untuk mencapai ini.
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 protokolCustomStringConvertible
dan kemudian mengimplementasikandescription
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 memanggilString
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 diimplementasikanCustomStringConvertible
)sumber
String(obj)
?.debugDescription
untuk versi yang lebih ramah programmerJika memungkinkan untuk menggunakan struct alih-alih kelas, maka tidak ada tambahan yang harus dilakukan.
struct hanya mencetak dengan baik sendiri ke output
print("\(yourStructInstance)")
atau dengan kelas seperti ini:
print(String(describing: yourClassInstance))
sumber
Anda harus menggunakan
String(obj)
.Langsung dari dokumentasi untuk CustomStringConvertible :
sumber
description()
metodeCustomStringConvertible
akan cukup.Bagaimana itu dilakukan dengan
NSObject
kelas yang diperluasJika kelas model Anda diperpanjang dari
NSObject
, Anda harus mengganti Variabeldescription
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 perluCustomStringConvertible
lagi mematuhi kelas, dan Andadescription
mengganti variabel dariNSObject
kelas itu sendiri. Selalu ingat,CustomStringConvertible
sebagian besar adalah cara Swift murni untuk mencapai ini.sumber