2014-06-05 15 views
20

Loại Array trong Swift có hàm thành viên được gọi là sort, có chữ ký là sort(isOrderedBefore: (T, T) -> Bool). Chức năng này khác với phiên bản toàn cầu của sort, có chữ ký sort(array: T[], pred: (T, T) -> Bool).Gọi hàm toàn cầu có cùng tên với chức năng thành viên

Nếu mở rộng Array (xem Why does the same method fail when inside an Array extension in Swift?), gọi sort từ bên trong phạm vi của tiện ích Array sẽ tự nhiên dẫn đến phiên bản cục bộ đang được sử dụng.

Có thể gọi hàm một cách rõ ràng từ phạm vi bên ngoài, hoặc cụ thể từ phạm vi toàn cục, ngay cả khi tên của nó trùng với tên của hàm từ phạm vi bên trong?

Đây sẽ là tương tự như nhà điều hành có độ phân giải Phạm vi C++, ::

+0

Ah, bạn có nghĩa là nhà điều hành phạm vi toàn cầu của C++ '::'? Câu hỏi thú vị. – Yawar

+0

@Yawar, vâng, chính xác. – Cezar

Trả lời

25

Chris Lattner suggests đủ điều kiện tên của hàm toàn cầu với không gian tên mặc định của Swift, Swift. Vì vậy, bạn sẽ có thể truy cập phiên bản toàn cầu bằng cách sử dụng: Swift.sort.

+1

Tuyệt vời! Cảm ơn bạn. – Cezar

+1

ah, nhưng nếu nó không có trong Swift, nhưng trong mô-đun cục bộ thì sao? –

+6

@AlexBrown nếu tên mục tiêu của bạn là "MyApp", bạn có thể gọi hàm toàn cầu với MyApp.theGlobalFunction(). Tôi đã có một cuộc xung đột tương tự với các chức năng toàn cầu của Alamofire (để nhắm mục tiêu iOS7 bạn không thể sử dụng các khung công tác nhúng và vì vậy lib không phải là không gian tên) – MathieuLescure

0

Bó toàn cầu sort, ví dụ,

func my_sort<T>(arr: T[], pred: (T, T) -> Bool) -> T[] { 
    return sort(arr, pred) 
} 
Các vấn đề liên quan