後,此高度相關的其他問題有關從斯威夫特訪問ObjC回調。但是我的研究還沒有取得成果。目標C座是零轉讓
任何人都可以看到,如果我有可能做一些錯誤的語法明智的嗎?
謝謝!
我已經宣佈了下述目標C回調爲:
#import <UIKit/UIKit.h>
@class KxMovieDecoder;
typedef void (^KX_FIRST_FRAME_CALLBACK)() ;
extern NSString * const KxMovieParameterMinBufferedDuration; // Float
extern NSString * const KxMovieParameterMaxBufferedDuration; // Float
extern NSString * const KxMovieParameterDisableDeinterlacing; // BOOL
@interface KxMovieViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> {
KX_FIRST_FRAME_CALLBACK firstFrameLoaded;
}
+ (id) movieViewControllerWithContentPath: (NSString *) path
parameters: (NSDictionary *) parameters;
@property (readonly) BOOL playing;
@property (nonatomic, copy) KX_FIRST_FRAME_CALLBACK firstFrameLoaded;
- (void) play;
- (void) pause;
@end
當我分配給它的SWIFT代碼,它仍然是分配後無:
public func startViewing() -> UIViewController {
kxMoviePlayer = KxMovieViewController.movieViewControllerWithContentPath(rtspURL, parameters: nil) as? KxMovieViewController
kxMoviePlayer!.firstFrameLoaded = {
self.onFirstFrameOfVideo()
}
Objective-C的實現是什麼樣的?只是'@ synthesize'語句?此外,您的代碼目前看起來可能會創建一個保留週期。如果自己保留了kxMoviePlayer,你可以考慮在你的塊中添加一個捕獲列表:'kxMoviePlayer!.firstFrameLoaded = {[unowned self]() - > self.onFirstFrameOfVideo()}中的void。這不會導致它成爲'零'。 –
感謝您的提示,我會的。 –