这与从Swift访问ObjC回调的其他问题密切相关。但是我的研究还没有产生结果。
任何人都能看到我在这里做错了吗?
我已将以下Objective-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
当我从快速代码中分配它时,它在赋值后仍为零:
public func startViewing() -> UIViewController {
kxMoviePlayer = KxMovieViewController.movieViewControllerWithContentPath(rtspURL, parameters: nil) as? KxMovieViewController
kxMoviePlayer!.firstFrameLoaded = {
self.onFirstFrameOfVideo()
}
答案 0 :(得分:1)
只需将类似设置的空白项目组合在一起就可以了。但有几个问题。
你的意思是同时拥有一个实例变量和一个名为firstFrameLoaded
的属性吗?您的自动合成属性不使用实例变量,而是使用自动生成的_firstFrameLoaded
实例变量。也许这是混乱的根源,你的意思是在i-var前加一个下划线?
回调属性的任何原因是copy
而不是指示strong
或weak
引用?