这与有关从 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
当我从 swift 代码中分配给它时,分配后它仍然为零:
public func startViewing() -> UIViewController {
kxMoviePlayer = KxMovieViewController.movieViewControllerWithContentPath(rtspURL, parameters: nil) as? KxMovieViewController
kxMoviePlayer!.firstFrameLoaded = {
self.onFirstFrameOfVideo()
}
最佳答案
只需将一个具有类似设置的空白项目放在一起,它就可以正常工作。不过有几个问题。
您的意思是同时拥有一个实例变量和一个名为 firstFrameLoaded
的属性吗?您的自动合成属性未使用实例变量,而是使用自动生成的 _firstFrameLoaded
实例变量。也许这就是混淆的根源,您打算在 i-var 前加上下划线?
回调属性是 copy
而不是指示 strong
或 weak
引用的任何原因?
关于ios - 从 Swift 分配的 Objective-C block 在分配后为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32959396/