2017-07-11 12 views
0

Ich habe diese Eigenschaft:Gibt es eine Möglichkeit, ein NSArray <NSValue> von CGPoint als [CGPoint] Swift zu offenbaren?

@property (nonatomic) NSArray<NSValue *> *vertices; 

wo die Ecken des Typs sind CGPoint.

Ich weiß Swift hat einige praktische Sprachfunktionen wie NS_SWIFT_NAME, um die Funktionsnamen zu ändern, aber ich frage mich, ob es eine Möglichkeit gibt, diese Eigenschaft als [CGPoint] -Typ in Swift verfügbar zu machen.

Ich frage, wie man dies in der objective-c-Syntax tun, wie man eine objective-c-API erstellt, die "Scheitelpunkte" als [CGPoint] in Swift verfügbar macht.

Danke.

+0

Was möchten Sie hier Obj C Lösung von oben genannten Array? – CodeChanger

+0

Ja, ich möchte eine objc-Lösung, die in swift als [CGPoint] – luis

Antwort

0

Sie können in Obj-C keine Eigenschaft des Typs [CGPoint] in Swift schreiben.

Sie können Ihre vertices Eigenschaft mit NS_REFINED_FOR_SWIFT annotieren. Dies wird Swift als eine Eigenschaft namens __vertices stattdessen verfügbar machen. Jetzt können Sie in Swift eine Erweiterung für Ihre Klasse schreiben, die ihre eigene var vertices: [CGPoint] berechnete Eigenschaft bereitstellt. Es könnte so aussehen

var vertices: [CGPoint] { 
    return __vertices.map({ $0.cgPointValue }) 
} 

Der Nachteil dieses Ansatzes jedes Mal, wenn die vertices Eigenschaft Zugriff ist von Swift wird es ein ganz neues Array zuweisen müssen. Aber es gibt nicht wirklich einen Weg, wenn Sie eine [CGPoint] freilegen wollen (neben dem Versuch zu sehen, ob Sie jede Art von Caching-Verhalten implementieren können, wo Sie nur die neue [CGPoint] erstellen, wenn die ursprüngliche NSArray<NSValue *> geändert).

0

Gemäß meinem Verständnis müssen Sie über CGPoint Array in Obj-C, so dass Sie CGPoint Array wie folgt verwendet werden:

self.vertices = @[[NSValue valueWithCGPoint:CGPointMake(0, 10)], 
         [NSValue valueWithCGPoint:CGPointMake(10, 20)]]; 

für diesen Punkt zurück:

CGPoint pointValue = [self.vertices[0] CGPointValue]; 

hoffen, dass dies hilft .

+0

angezeigt wird Ich denke, Sie missverstanden meine Fragen, was ich in objective-c-Syntax, wie zum Erstellen einer objective-c-API, die stellt " Vertices "als [CGPoint] in Swift. – luis

Verwandte Themen