методы расширения массива недоступны из других модулей (например, проект XCTest)расширение массива вызывается из других модулей
Для простоты ниже код ничего не делает, но он может быть использован для воспроизведения ошибки
import Foundation
extension Array {
mutating func myMethod(toIndex: Int) -> Int! {
// no real code, it's here only to show the problem
return 0
}
}
Вызов его из одних и тех же модуль работает, как ожидалось, но из тестового класса не
class MyProjectTests: XCTestCase {
func testMoveObjectsFromIndexes1() {
var arr = ["000", "001", "002", "003"]
arr.myMethod(0)
}
}
Я думаю, что это правильно, потому что видимость метод restricte d его собственный модуль, на самом деле я получаю ошибку '[String]' does not have a member named 'myMethod'
Я попытался определить расширенный метод как public
, как показано ниже
extension Array {
public mutating func myMethod(toIndex: Int) -> Int! {
// no real code, it's here only to show the problem
return 0
}
}
Но я получаю ошибку 'Extension of generic type 'Array<T>' from a different module cannot provide public declarations'
компилировать До Beta 7 с использованием public
решил проблему, но под XCode 6.1 (6A1046a) Я получаю эту ошибку
Как исправить ее для работы под другими модулями/проектами?
Почему продлить Массив, когда вы можете объявить публичную функцию верхнего уровня? – mattt
Вы не можете исправить эту проблему. Swift 1.1 отключил публичные расширения родовых типов вне вашего собственного модуля явно, потому что реализация не была лучшей, когда они это позволяли. Радар для его возвращения. – CodaFi
@mattt это просто пример, чтобы воспроизвести проблему, настоящий код использует элементы массива, поэтому он идеален как расширение. – dafi