Swift tương đương với Java là gì toString()
để in trạng thái của một cá thể lớp?
Swift tương đương với Java là gì toString()
để in trạng thái của một cá thể lớp?
Câu trả lời:
Tài description
sản là những gì bạn đang tìm kiếm. Đây là thuộc tính được truy cập khi bạn in một biến có chứa một đối tượng.
Bạn có thể thêm description
vào các lớp của riêng mình bằng cách áp dụng giao thức CustomStringConvertible
và sau đó triển khai thuộc description
tính.
class MyClass: CustomStringConvertible {
var val = 17
public var description: String { return "MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12
print(myobj) // "MyClass: 12"
description
cũng được sử dụng khi bạn gọi hàm String
tạo:
let str = String(myobj) // str == "MyClass: 12"
Đây là phương pháp được khuyến nghị để truy cập mô tả cá thể (ngược lại với phương thức myobj.description
này sẽ không hoạt động nếu một lớp không triển khai CustomStringConvertible
)
String(obj)
thì sao?
.debugDescription
phiên bản thân thiện với lập trình viên hơn
Bạn nên sử dụng String(obj)
.
Trực tiếp từ tài liệu cho CustomStringConvertible :
GHI CHÚ
Chuỗi (cá thể) sẽ hoạt động đối với một thể hiện thuộc loại bất kỳ, trả về mô tả của nó nếu thể hiện đó là CustomStringConvertible. Do đó, không khuyến khích sử dụng CustomStringConvertible như một ràng buộc chung hoặc truy cập trực tiếp vào mô tả của loại phù hợp.
description()
phương pháp của CustomStringConvertible
sẽ là đủ.
NSObject
các lớp mở rộngNếu lớp mô hình của bạn được mở rộng từ NSObject
, bạn phải ghi đè Biến description
như sau:
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}"
}
Bạn có thể kiểm tra cách tôi đã thực hiện tại đây trong Country
lớp học , trong "thư viện CountryPicker iOS Swift" .
Hoặc, để bạn dễ hiểu hơn, lớp và description
phương thức của bạn sẽ giống như sau:
public class MyClass: NSObject {
public var memberAttribute = "I'm an attribute"
public override var description: String {
return "My Class member: \(self.memberAttribute)"
}
}
Lưu ý:
Vì bạn đang mở rộng lớp Modal của mình nên lớp NSObject
này không yêu cầu lớp của bạn phải tuân thủ CustomStringConvertible
lớp nữa và bạn đang ghi đè description
biến từ NSObject
chính lớp đó. Hãy luôn nhớ rằng, CustomStringConvertible
phần lớn là cách Swift thuần túy để đạt được điều này.