2017-01-27 43 views
0

У меня есть большая проблема!Быстрый доступ к объекту в ObjC++

Я пытаюсь использовать свойство Swift в классе ObjC++, но ничего не работает!

My Swift Класс:

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 
} 

В ObjC++ класс .h:

@class G; 

В ObjC++ класс .mm:

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

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

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

Что случилось? Спасибо за помощь ...

ответ

1

«G» в вашем объекте C-код - это класс, поэтому то, что вы пытаетесь сделать, это получить свойство класса, а не экземпляр этого класса.

Вы можете получить доступ к свойству из экземпляра (или объекта) класса, так G должен быть параметр в вашем initWithFrame или он должен быть его собственностью в вашем объекте Obj-C (например self.G.hST).

Другая вещь, которую вы можете сделать, это объявить свое свойство hST как функцию class (например, посмотрите at this related question). То есть:

@objc class G: NSObject { 

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

Благодарим за отзыв. Это работает ! Но я немного меняю, потому что хочу сохранить свойство как статическое свойство.

В моем классе G:

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

Таким образом, я могу изменить значение внутри другого Swift класса.

В моем классе ObjC, я использую:

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

Спасибо большое!