metodi di estensione array sono disponibili da altri moduli (per esempio il progetto XCTest)Array estensione chiamata da altri moduli
Per semplicità il codice qui sotto non fa altro che può essere utilizzato per riprodurre l'errore
import Foundation
extension Array {
mutating func myMethod(toIndex: Int) -> Int! {
// no real code, it's here only to show the problem
return 0
}
}
Chiamarlo dalle stesse opere modulo come previsto, ma da una classe test non
class MyProjectTests: XCTestCase {
func testMoveObjectsFromIndexes1() {
var arr = ["000", "001", "002", "003"]
arr.myMethod(0)
}
}
Penso che questo è corretto perché la visibilità metodo è restricte d al proprio modulo, infatti ottengo l'errore '[String]' does not have a member named 'myMethod'
Ho cercato di definire il metodo estesa come public
come mostrato di seguito
extension Array {
public mutating func myMethod(toIndex: Int) -> Int! {
// no real code, it's here only to show the problem
return 0
}
}
Ma ottengo l'errore di compilazione 'Extension of generic type 'Array<T>' from a different module cannot provide public declarations'
Fino Beta 7 utilizzando public
risolto il problema, ma in XCode 6.1 (6A1046a) ottengo questo errore
Come posso risolvere il problema per l'esecuzione in altri moduli/progetti?
Perché estendere Matrice quando è possibile dichiarare una funzione pubblica di primo livello? – mattt
Non è possibile risolvere questo problema. Swift 1.1 ha disabilitato le estensioni pubbliche di tipi generici al di fuori del proprio modulo esplicitamente perché l'implementazione non era la migliore quando lo permettevano. Radar per il suo ritorno. – CodaFi
@mattt questo è solo un esempio per riprodurre il problema, il codice vero e utilizza elementi di matrice quindi è perfetto come estensione – dafi