从Swift分配的Objective-C Block在赋值后为零

问题描述 投票:0回答:1

这与从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代码中分配它时,它在赋值后仍为零:

Image showing debug

public func startViewing() -> UIViewController {

        kxMoviePlayer = KxMovieViewController.movieViewControllerWithContentPath(rtspURL, parameters: nil) as? KxMovieViewController
        kxMoviePlayer!.firstFrameLoaded = {
            self.onFirstFrameOfVideo()
        }
ios objective-c swift objective-c-blocks swift2
1个回答
1
投票

只需将一个类似设置的空白项目组合在一起就可以了。但有几个问题。

你的意思是同时拥有一个实例变量和一个名为firstFrameLoaded的属性吗?您的自动合成属性不使用实例变量,而是使用自动生成的_firstFrameLoaded实例变量。也许这是混乱的根源,你的意思是在i-var前加下划线?

回调属性的任何原因是copy而不是指示strongweak引用?

© www.soinside.com 2019 - 2024. All rights reserved.