2015-06-17 15 views
7

Tôi đang cố gắng để làm cho lớp học của tôi Digit hiển thị biến num bất cứ khi nào in được gọi trên đối tượng đó, trong Swift 2.0. Tôi nghĩ rằng điều này có thể được thực hiện với một biến mô tả, nhưng không may mắn.Thay đổi những gì in (Object) hiển thị trong Swift 2.0

class Digit { 

    var num: Int 
    var x: Int 
    var y: Int 
    var box: Int 
    var hintList: [Int] = [] 
    var guess: Bool = false 

    var description: String { 
    let string = String(num) 
    return string 
    } 
} 

Trả lời

14

Không đủ để chỉ thêm biến description. Bạn cũng cần nêu rõ rằng lớp học của bạn tuân theo CustomStringConvertible (trước đây được gọi là Printable trong các phiên bản Swift trước đó).

Nếu bạn chỉ huy nhấp vào hàm print, bạn sẽ tìm thấy mô tả sau.

Ghi đại diện văn bản value và dòng mới tùy chọn, vào đầu ra tiêu chuẩn.

Các đại diện văn bản được lấy từ các value sử dụng giao thức conformances của nó, theo thứ tự ưu tiên sau: Streamable, CustomStringConvertible, CustomDebugStringConvertible. Nếu không tìm thấy sự phù hợp nào trong số , thì văn bản mặc định được xây dựng theo cách được triển khai, dựa trên loại và cấu trúc loại.

Phần trong đó có vấn đề ở đây là các đối tượng thông qua với print không được kiểm tra hay không mà họ có một phương pháp description, nhưng thay vào đó kiểm tra cho những việc như có hay không phù hợp với các giao thức như CustomStringConvertible trong đó cung cấp dữ liệu Được in.

Điều đó đang được nói, tất cả những gì bạn cần làm trong trường hợp này là xác định rằng lớp học của bạn tuân theo CustomStringConvertible vì bạn đã thêm biến số description. Nếu bạn chưa thêm điều này, trình biên dịch sẽ phàn nàn vì giao thức này yêu cầu phải thực hiện biến số description.

class Digit: CustomStringConvertible { 
    var num: Int 
    var x: Int 
    var y: Int 
    var box: Int 
    var hintList: [Int] = [] 
    var guess: Bool = false 

    var description: String { 
     let string = String(num) 
     return string 
    } 
} 
Các vấn đề liên quan