Objective-C 从 Swift 分配的块在分配后为零
Objective-C Block assigned from Swift is nil after assignment
这与有关从 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
引用?
这与有关从 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
引用?