phương pháp mảng phần mở rộng khác không có sẵn từ các module khác (ví dụ như các dự án XCTest)Mảng mở rộng gọi từ mô-đun
Vì lợi ích của sự đơn giản mã dưới đây không có gì nhưng nó có thể được sử dụng để sao chép các lỗi
import Foundation
extension Array {
mutating func myMethod(toIndex: Int) -> Int! {
// no real code, it's here only to show the problem
return 0
}
}
Gọi nó từ những tác phẩm mô-đun tương tự như kỳ vọng nhưng từ một lớp thử nghiệm không
class MyProjectTests: XCTestCase {
func testMoveObjectsFromIndexes1() {
var arr = ["000", "001", "002", "003"]
arr.myMethod(0)
}
}
tôi nghĩ rằng điều này là đúng bởi vì khả năng hiển thị phương pháp là restricte d để mô-đun riêng của mình, thực sự tôi có được lỗi '[String]' does not have a member named 'myMethod'
Tôi đã cố gắng để xác định phương pháp mở rộng như public
như hình dưới đây
extension Array {
public mutating func myMethod(toIndex: Int) -> Int! {
// no real code, it's here only to show the problem
return 0
}
}
Nhưng tôi nhận được lỗi biên dịch 'Extension of generic type 'Array<T>' from a different module cannot provide public declarations'
Cho đến Beta 7 sử dụng public
giải quyết được sự cố nhưng theo XCode 6.1 (6A1046a) Tôi nhận được lỗi này
Làm cách nào để khắc phục sự cố để chạy trong các mô-đun/dự án khác?
Tại sao mở rộng Mảng khi bạn có thể khai báo một hàm cấp cao công khai? – mattt
Bạn không thể khắc phục sự cố này. Swift 1.1 đã tắt các phần mở rộng công khai của các kiểu generic bên ngoài mô-đun của riêng bạn một cách rõ ràng bởi vì việc triển khai thực hiện không tốt nhất khi chúng cho phép nó. Radar cho sự trở lại của nó. – CodaFi
@mattt đây chỉ là một ví dụ để tái tạo vấn đề, mã thực sử dụng các mục mảng sao cho nó hoàn hảo như phần mở rộng – dafi