2016-04-13 22 views
36

Tương đương Swift của Java .toString() để in trạng thái của cá thể lớp là gì?Tương đương Swift của Java .toString()

+0

More @ http://stackoverflow.com/questions/24068506/how-can- i-thay đổi-the-text-biểu diễn-hiển thị-cho-một-loại-swift –

Trả lời

53

Thuộc tính description 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 chứa một đối tượng.

Bạn có thể thêm description vào các lớp học của riêng mình bằng cách áp dụng giao thức CustomStringConvertible và sau đó triển khai thuộc tính description.

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 String constructor:

let str = String(myobj) // str == "MyClass: 12" 

Đây là phương pháp khuyến khích cho việc tiếp cận các mô tả ví dụ (như trái ngược với myobj.description mà sẽ không hoạt động nếu một lớp học không triển khai CustomStringConvertible)

+0

Điều gì về 'String (obj)'? – nielsbot

+0

Ngoài ra còn có '.debugDescription' để có phiên bản thân thiện hơn với lập trình viên – nielsbot

+2

áp dụng cho cấu trúc? – lmiguelvargasf

6

Bạn nên sử dụng String(obj).

trực tiếp từ the documentation for CustomStringConvertible:

LƯU Ý

String (chẳng hạn) sẽ làm việc cho một thể hiện của bất kỳ loại, trở về mô tả của nó nếu trường hợp xảy ra là CustomStringConvertible. Sử dụng CustomStringConvertible làm 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 của loại phù hợp, do đó không khuyến khích.

+0

Có vẻ như phương thức 'description()' của 'CustomStringConvertible' sẽ là đủ. –

4

Nếu có thể sử dụng cấu trúc thay vì lớp học, thì không cần phải làm gì thêm.

struct chỉ in tốt bản thân để đầu ra

print("\(yourStructInstance)") 

hoặc với lớp như thế này: info

print(String(describing: yourClassInstance)) 
Các vấn đề liên quan