3

ich versucht bin die folgende Bibliothek in mein Projekt umzusetzen:Schutzstufe Probleme, wenn eine Struktur innerhalb einer Erweiterung zugreifen

https://github.com/knutigro/COBezierTableView

Um dies zu verwenden, können die folgenden Eigenschaften benutzerdefinierte Werte angegeben werden:

public extension UIView { 

    public struct BezierPoints { 

     static var p1 = CGPoint.zero 
     static var p2 = CGPoint.zero 
     static var p3 = CGPoint.zero 
     static var p4 = CGPoint.zero 
    } 
} 

In meinem MainVC dies ist wie folgt konfiguriert:

UIView.BezierPoints.p1 = CGPoint(... 
UIView.BezierPoints.p2 = CGPoint(... 
UIView.BezierPoints.p3 = CGPoint(... 
UIView.BezierPoints.p4 = CGPoint(... 

Im Swift 2.3 Demo-Projekt gibt es keine Fehler. In einem Swift 3-Projekt erhalte ich den Fehler:

"p1 ist aufgrund der 'internen' Schutzstufe nicht erreichbar."

Kann jemand bitte etwas Licht auf das Problem hier werfen, ich rate, Swift 3 hat einige neue hinter den Kulissen Berechtigungen übernehmen, die überschrieben werden müssen.

Antwort

6

Ich vermute, die Erweiterung, die Sie erwähnen, ist nicht in dem gleichen Ziel wie Ihr MainVC?

Da p1 usw. keine Schutzstufe zugeordnet haben (und die struct ist nicht private), sind sie automatisch internal. Das bedeutet, dass Sie nur auf diese Eigenschaften innerhalb desselben Ziels zugreifen können.

Aber das war auch in früheren Versionen von Swift der Fall. Ich weiß nicht, warum dein Code jemals funktioniert hat.

+2

Oh natürlich! Es war mir nicht in den Sinn gekommen, dass das Demo-Projekt nicht die gleichen Ziele hatte. Das Ändern der Eigenschaften zu öffentlich löste dieses Problem, und ich fand auch diese nützliche Ressource https://www.andrewcbancroft.com/2015/04/22/3-nuances-of-swift-extensions/ –

Verwandte Themen