2017-01-27 3 views
0

Ich habe ein großes Problem!Swift Eigentum Zugang in ObjC++

Ich versuche, eine Swift-Eigenschaft in ObjC++ Klasse zu verwenden, aber nichts funktioniert!

Meine Swift Klasse:

let wST:CGFloat = 200 

@objc class G: NSObject { 
    private override init() {} 

    class func sizeST() -> CGSize { return CGSize(width: wST, height: 200)} 
    // Another test 
    static var hST:CGFloat = 200 
} 

In ObjC++ Klasse .h:

@class G; 

In ObjC++ Klasse .mm:

#import "PROJECT-Swift.h" 
... 

- (id)initWithFrame:(CGRect)frame { 
    NSLog(@"Property : %@", [G sizeST]); 

    // With static var 
    NSLog(@"Property : %f", G.hST); 
} 

Was ist los? Danke für Ihre Hilfe ...

Antwort

1

"G" in Ihrem Objective-C-Code ist eine Klasse. Sie versuchen also, eine Eigenschaft aus einer Klasse zu erhalten, keine Instanz dieser Klasse.

Sie können eine Eigenschaft Zugriff von einer Instanz (oder Objekt) eine Klasse, so muss G ein Parameter in Ihrem initWithFrame sein oder es muss eine eigene Eigenschaft in Ihrem Obj-C-Objekt (z self.G.hST).

Eine andere Sache, die Sie tun können, ist Ihre hST Eigenschaft als eine class Funktion stattdessen zu deklarieren (z. B. Look at this related question). Das ist:

@objc class G: NSObject { 

    class func hST() -> CGFloat { 
     return 200 
    } 
} 
0

Vielen Dank für Ihre Antwort. Es ist Arbeit ! Aber ich ändere ein wenig, weil ich Eigenschaft als statische Eigenschaft behalten möchte.

In meiner Klasse G:

static var _hST:CGFloat = 300.0 
static func hST() -> CGFloat { return _hST } 

So kann ich den Wert in einer anderen Swift-Klasse ändern.

In meiner ObjC Klasse, die ich benutze:

NSLog(@"hST -> %f", [G hST]); 

Vielen Dank!

Verwandte Themen