2014-06-11 14 views
12

Nhìn vào định nghĩa cho sự quá tải của nhà điều hành trong += Swift duy nhất cho phép bạn thêm các yếu tố để một bộ sưu tập:Ràng buộc loại chung loại này có ý nghĩa gì trong Swift?

/// Append the elements of rhs to lhs 
func +=<T, C : Collection where T == T>(inout lhs: ContiguousArrayBuffer<T>, rhs: C) 
           ^^^^^^ 

nào T == T chế làm gì? Tại sao chúng ta cần nó ở đây? Dường như một ràng buộc tầm thường luôn đúng.

+1

Bên trong hàm quá tải toán tử toàn cục này trông có vẻ lạ ... Tuy nhiên, nhìn vào các địa điểm khác sử dụng điều này, chẳng hạn như 'mở rộng T []: ArrayType {init (_ s: S)} 'Có vẻ như nó đơn giản cố gắng đảm bảo các phần tử của chuỗi đối số có cùng kiểu với mảng mà bạn đang cố khởi tạo. Tôi không chắc chắn như thế nào được thực thi thông qua cú pháp này mặc dù .. – Jack

Trả lời

6

Các định nghĩa bạn thấy trong Xcode không thực sự là mã Swift hợp lệ. Nó được tạo ra bằng cách nào đó trên bay từ các tập tin gốc

Tôi giả định rằng phần T == T là một lỗi do máy phát điện thực hiện khi giảm các tệp gốc.

Tôi đã cố gắng xác định một chức năng tương tự theo cách của mình và T == T là không cần thiết ở đó, đôi khi nó thực sự gây ra cảnh báo.

+0

Tôi sẽ xây dựng khi tôi đang ở máy tính để bàn của tôi. – Sulthan

+1

Tôi tin rằng bạn đã đúng. Các khai báo được tạo tự động. 1/Bạn không thể hiển thị tệp trong Trình tìm kiếm. 2/Các biểu tượng được sắp xếp theo tên với thứ tự ASCII. Không có con người nào sắp xếp mã theo cách đó. 3/Một vài tiện ích mở rộng trống, cho thấy chúng chứa mã không được phân tích cú pháp/chuyển đổi. 5/Tờ khai không đầy đủ. Ví dụ, không có phương thức nào được khai báo là 'mutating', có nghĩa là chúng ta có thể sử dụng bất kỳ phương thức nào trên một hằng số (nhưng chúng ta không thể). –

+1

@NicolasBachschmidt Ngoài ra còn có một số ngữ pháp không hợp lệ, ví dụ: 'extension T []'. Tôi tin rằng 'T == T' trong trường hợp này là có bởi vì hàm là một phần của việc thực hiện một giao thức riêng tư. – Sulthan

Các vấn đề liên quan